1
0
mirror of https://git.cloudron.io/cloudron/freshrss-app synced 2025-09-17 18:59:08 +00:00

Compare commits

...

8 Commits

Author SHA1 Message Date
Girish Ramakrishnan
e8690400c9 Version 1.3.0 2018-11-05 09:50:01 -08:00
Girish Ramakrishnan
852944cb8f Update FreshRSS to 1.12.0 2018-11-05 09:42:03 -08:00
Girish Ramakrishnan
94ccfe149e Version 1.2.0 2018-10-14 15:47:56 -07:00
Girish Ramakrishnan
01e3d7ad53 use latest base image 2018-10-14 15:41:35 -07:00
Girish Ramakrishnan
c89fca80bc Version 1.1.2 2018-09-09 18:46:27 -07:00
Girish Ramakrishnan
3594901aee Fix tests 2018-09-09 18:45:57 -07:00
Girish Ramakrishnan
5bb5fae5c8 fix promise use 2018-09-09 18:31:57 -07:00
Girish Ramakrishnan
2bc2cf8292 Update FreshRSS to 1.11.2 2018-09-09 18:09:54 -07:00
5 changed files with 99 additions and 68 deletions

View File

@@ -50,3 +50,28 @@
[1.1.1] [1.1.1]
* Update FreshRSS to to 1.11.1 * Update FreshRSS to to 1.11.1
[1.1.2]
* Update FreshRSS to 1.11.2
[1.2.0]
* Use latest base image
[1.3.0]
* Update FreshRSS to 1.12.0
* Features
* Ability to add labels (custom tags) to articles #928
* Handle article tags containing spaces, as well as comma-separated tags #2023
* Handle authors containing spaces, as well as comma or semi-colon separated authors #2025
* Searches by tag, author, etc. accept Unicode characters #2025
* New option to disable cache for feeds with invalid HTTP caching #2052
* UI
* New theme Swage #2069
* Click on authors to initiate a search by author #2025
* Fix CSS for button alignments in older Chrome versions #2020
* Security
* Improved flow for password change (avoid error 403) #2056
* Allow dot . in username (best to avoid, though) #2061
* Performance
* Remove some counterproductive preload / prefetch rules #2040
* Improved fast flush (earlier transfer, fetching of resources, and rendering) #2045

View File

@@ -5,7 +5,7 @@
"description": "file://DESCRIPTION.md", "description": "file://DESCRIPTION.md",
"changelog": "file://CHANGELOG", "changelog": "file://CHANGELOG",
"tagline": "RSS feed reader", "tagline": "RSS feed reader",
"version": "1.1.1", "version": "1.3.0",
"healthCheckPath": "/", "healthCheckPath": "/",
"httpPort": 8000, "httpPort": 8000,
"addons": { "addons": {

View File

@@ -1,4 +1,4 @@
This app packages FreshRSS <upstream>1.11.1</upstream>. This app packages FreshRSS <upstream>1.12.0</upstream>.
FreshRSS is a self-hosted RSS feed aggregator such as Leed or Kriss Feed. FreshRSS is a self-hosted RSS feed aggregator such as Leed or Kriss Feed.

View File

@@ -1,13 +1,9 @@
FROM cloudron/base:0.10.0 FROM cloudron/base:1.0.0@sha256:147a648a068a2e746644746bbfb42eb7a50d682437cead3c67c933c546357617
RUN apt-get update \
&& apt-get -y install php php-curl php-gmp php-intl php-mbstring php-xml php-zip \
libapache2-mod-php mysql-client php-mysql
RUN mkdir -p /app/code RUN mkdir -p /app/code
WORKDIR /app/code WORKDIR /app/code
RUN curl -L https://github.com/FreshRSS/FreshRSS/archive/1.11.1.tar.gz | tar -zxvf - --strip-components=1 RUN curl -L https://github.com/FreshRSS/FreshRSS/archive/1.12.0.tar.gz | tar -zxvf - --strip-components=1
RUN mv data data-orig && ln -s /app/data data RUN mv data data-orig && ln -s /app/data data
@@ -31,12 +27,12 @@ RUN rm -rf /var/lib/php \
&& ln -s /run/php /var/lib/php \ && ln -s /run/php /var/lib/php \
&& mkdir -p /run/php/session && mkdir -p /run/php/session
RUN crudini --set /etc/php/7.0/apache2/php.ini PHP upload_max_filesize 64M && \ RUN crudini --set /etc/php/7.2/apache2/php.ini PHP upload_max_filesize 64M && \
crudini --set /etc/php/7.0/apache2/php.ini PHP post_max_size 64M && \ crudini --set /etc/php/7.2/apache2/php.ini PHP post_max_size 64M && \
crudini --set /etc/php/7.0/apache2/php.ini PHP memory_limit 64M && \ crudini --set /etc/php/7.2/apache2/php.ini PHP memory_limit 64M && \
crudini --set /etc/php/7.0/apache2/php.ini Session session.save_path /run/php/session && \ crudini --set /etc/php/7.2/apache2/php.ini Session session.save_path /run/php/session && \
crudini --set /etc/php/7.0/apache2/php.ini Session session.gc_probability 1 && \ crudini --set /etc/php/7.2/apache2/php.ini Session session.gc_probability 1 && \
crudini --set /etc/php/7.0/apache2/php.ini Session session.gc_divisor 100 crudini --set /etc/php/7.2/apache2/php.ini Session session.gc_divisor 100
ADD start.sh /app/code/start.sh ADD start.sh /app/code/start.sh

View File

@@ -45,79 +45,83 @@ describe('Application life cycle test', function () {
var TEST_TIMEOUT = 10000; var TEST_TIMEOUT = 10000;
var app; var app;
function exists(selector, callback) { function exists(selector) {
return browser.wait(until.elementLocated(selector), TEST_TIMEOUT).then(function () { return browser.wait(until.elementLocated(selector), TEST_TIMEOUT);
callback();
});
} }
function visible(selector, callback) { function visible(selector, callback) {
exists(selector, function () { return exists(selector).then(function () {
browser.wait(until.elementIsVisible(browser.findElement(selector)), TEST_TIMEOUT).then(function () { return browser.wait(until.elementIsVisible(browser.findElement(selector)), TEST_TIMEOUT);
callback();
});
}); });
} }
function login(callback) { function login(callback) {
browser.manage().deleteAllCookies(); browser.manage().deleteAllCookies().then(function () {
browser.get('https://' + app.fqdn); return browser.get('https://' + app.fqdn);
}).then(function () {
visible(by.id('loginButton'), function () { return visible(by.id('loginButton'));
browser.findElement(by.id('username')).sendKeys(username); }).then(function () {
browser.findElement(by.id('passwordPlain')).sendKeys(password); return browser.findElement(by.id('username')).sendKeys(username);
browser.findElement(by.id('loginButton')).click(); }).then(function () {
browser.wait(until.elementLocated(by.id('dropdown-configure')), TEST_TIMEOUT).then(function () { callback(); }); return browser.findElement(by.id('passwordPlain')).sendKeys(password);
}).then(function () {
return browser.findElement(by.id('loginButton')).click();
}).then(function () {
return browser.wait(until.elementLocated(by.id('dropdown-configure')), TEST_TIMEOUT);
}).then(function () {
callback();
}); });
} }
function logout(callback) { function logout(callback) {
var logout_btn = by.xpath('//ul[@class="dropdown-menu"]/li/a[@class="signout"]'); var logout_btn = by.xpath('//ul[@class="dropdown-menu"]/li/a[@class="signout"]');
browser.get('https://' + app.fqdn); browser.get('https://' + app.fqdn).then(function () {
return visible(by.id('stream'));
visible(by.id('stream'), function () { }).then(function () {
browser.findElement(by.className('dropdown-toggle')).click(); return browser.findElement(by.className('dropdown-toggle')).click();
visible(logout_btn, function () { }).then(function () {
browser.findElement(logout_btn).click(); return visible(logout_btn);
}).then(function () {
browser.wait(until.elementLocated(by.id('loginButton')), TEST_TIMEOUT).then(function () { callback(); }); return browser.findElement(logout_btn).click();
}); }).then(function () {
return browser.wait(until.elementLocated(by.id('loginButton')), TEST_TIMEOUT);
}).then(function () {
callback();
}); });
} }
function addSubscription(callback) { function addSubscription(callback) {
var url = "https://cloudron.io/blog/rss.xml"; var url = "https://cloudron.io/blog/rss.xml";
browser.get('https://' + app.fqdn); browser.get(`https://${app.fqdn}/p/i/?c=subscription`).then(function () {
return visible(by.xpath('//input[@name="url_rss"]'));
visible(by.id('stream'), function () { }).then(function () {
browser.findElement(by.xpath('//a[@href=".?c=subscription"]')).click(); return browser.findElement(by.xpath('//input[@name="url_rss"]')).sendKeys(url);
visible(by.id('add_rss'), function () { }).then(function () {
browser.findElement(by.xpath('//input[@name="url_rss"]')).sendKeys(url); return browser.findElement(by.xpath('//form[@id="add_rss"]/div/button[@type="submit"]')).click();
browser.findElement(by.xpath('//form[@id="add_rss"]/div/button[@type="submit"]')).click(); }).then(function () {
visible(by.xpath('//div[@id="notification" and @class="notification good"]'), function() { callback(); }); return visible(by.xpath('//div[@id="notification" and @class="notification good"]'));
}); }).then(function () {
callback();
}); });
} }
function addUser(callback) { function addUser(callback) {
var test_username = 'test'; var test_username = 'test';
var manage_users_btn = by.xpath('//a[@href=".?c=user&a=manage"]');
browser.get('https://' + app.fqdn); browser.get(`https://${app.fqdn}/p/i/?c=user&a=manage`).then(function () {
return visible(by.id('new_user_name'));
visible(by.id('stream'), function () { }).then(function () {
browser.findElement(by.className('dropdown-toggle')).click(); return browser.findElement(by.id('new_user_name')).sendKeys(test_username);
visible(manage_users_btn, function () { }).then(function () {
browser.findElement(manage_users_btn).click(); return browser.findElement(by.id('new_user_passwordPlain')).sendKeys(password);
visible(by.id('new_user_name'), function () { }).then(function () {
browser.findElement(by.id('new_user_name')).sendKeys(test_username); return browser.findElement(by.xpath('//button[text()="Create"]')).click();
browser.findElement(by.id('new_user_passwordPlain')).sendKeys(password); }).then(function () {
browser.findElement(by.xpath('//form[@action=".?c=user&a=create"]/div/div/button[@type="submit"]')).click(); return visible(by.xpath('//div[@id="notification" and @class="notification good"]'));
visible(by.xpath('//div[@id="notification" and @class="notification good"]'), function() { callback(); }); }).then(function () {
}); callback();
});
}); });
} }
@@ -125,13 +129,17 @@ describe('Application life cycle test', function () {
browser.get('https://' + app.fqdn + '/p/i/?c=auth').then(function () { browser.get('https://' + app.fqdn + '/p/i/?c=auth').then(function () {
return browser.findElement(by.id('api_enabled')).click(); return browser.findElement(by.id('api_enabled')).click();
}).then(function () { }).then(function () {
return browser.findElement(by.xpath('//form[@action=".?c=auth"]')).submit(); return browser.findElement(by.xpath('//button[text()="Submit"]')).submit();
}).then(callback); }).then(function () {
callback();
});
} }
function checkApiConfiguration(callback) { function checkApiConfiguration(callback) {
browser.get('https://' + app.fqdn + '/p/api/greader.php/check%2Fcompatibility').then(function () { browser.get('https://' + app.fqdn + '/p/api/greader.php/check%2Fcompatibility').then(function () {
exists(by.xpath('//pre[text()="PASS"]'), callback); return exists(by.xpath('//pre[text()="PASS"]'));
}).then(function () {
callback();
}); });
} }
@@ -142,9 +150,11 @@ describe('Application life cycle test', function () {
} }
function subscriptionExists(callback) { function subscriptionExists(callback) {
browser.get('https://' + app.fqdn + '/p/i/?get=c_1'); browser.get('https://' + app.fqdn + '/p/i/?get=c_1').then(function () {
return visible(by.xpath('//a[text()="Cloudron.io"]'));
visible(by.xpath('//a[text()="Cloudron.io"]'), callback); }).then(function () {
callback();
});
} }
function getStaticExtensionFile(callback) { function getStaticExtensionFile(callback) {