Add tests

This commit is contained in:
Girish Ramakrishnan 2020-07-21 15:30:01 -07:00
parent 2effab3922
commit e62edc778e
4 changed files with 1409 additions and 674 deletions

1989
test/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -9,17 +9,17 @@
"author": "", "author": "",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"ejs": "^2.3.4", "ejs": "^3.1.3",
"expect.js": "^0.3.1", "expect.js": "^0.3.1",
"mkdirp": "^0.5.1", "mkdirp": "^1.0.4",
"mocha": "^2.3.4", "mocha": "^8.0.1",
"rimraf": "^2.4.4", "rimraf": "^3.0.2",
"superagent": "^1.4.0" "superagent": "^5.3.1"
}, },
"dependencies": { "dependencies": {
"chromedriver": "^2.38.3", "chromedriver": "^84.0.0",
"selenium-server-standalone-jar": "^3.3.1", "selenium-server-standalone-jar": "^3.141.59",
"selenium-webdriver": "^3.3.0", "selenium-webdriver": "^3.6.0",
"superagent": "^1.8.5" "superagent": "^1.8.5"
} }
} }

View file

@ -19,7 +19,7 @@ var execSync = require('child_process').execSync,
util = require('util'); util = require('util');
var by = webdriver.By, var by = webdriver.By,
Keys = webdriver.Key, Key = webdriver.Key,
until = webdriver.until, until = webdriver.until,
Builder = require('selenium-webdriver').Builder; Builder = require('selenium-webdriver').Builder;
@ -67,28 +67,84 @@ describe('Application life cycle test', function () {
browser.get('https://' + app.fqdn + '/login').then(function () { browser.get('https://' + app.fqdn + '/login').then(function () {
return browser.wait(until.elementLocated(by.id('username')), TEST_TIMEOUT); return browser.wait(until.elementLocated(by.id('username')), TEST_TIMEOUT);
}).then(function () { }).then(function () {
return browser.findElement(by.name('username')).sendKeys(username); return browser.findElement(by.id('username')).sendKeys(username);
}).then(function () { }).then(function () {
return browser.findElement(by.name('password')).sendKeys(password); return browser.findElement(by.id('password')).sendKeys(password);
}).then(function () { }).then(function () {
return browser.findElement(by.xpath('//input[@value="Login"]')).click(); return browser.findElement(by.xpath('//input[@value="Login"]')).click();
}).then(function () { }).then(function () {
return browser.wait(until.elementLocated(by.xpath('//h2[contains(text(), "Welcome to PeerTube")]')), TEST_TIMEOUT); return browser.wait(until.elementLocated(by.xpath('//div[contains(text(), "MY LIBRARY")]')), TEST_TIMEOUT);
}).then(function () { }).then(function () {
done(); done();
}); });
} }
function completeSetup(done) {
var button;
browser.get('https://' + app.fqdn + '/admin/config/edit-custom').then(function () {
return browser.wait(until.elementLocated(by.xpath('//a[contains(text(), "Configure my instance")]')), TEST_TIMEOUT);
}).then(function () {
return browser.findElement(by.xpath('//a[contains(text(), "Configure my instance")]')).click(); // this opens a new window
}).then(function () {
return browser.get('https://' + app.fqdn + '/admin/config/edit-custom');
}).then(function () {
return browser.wait(until.elementLocated(by.xpath('//input[contains(@value, "Update configuration")]')), TEST_TIMEOUT);
}).then(function () {
button = browser.findElement(by.xpath('//input[contains(@value, "Update configuration")]'));
return browser.executeScript('arguments[0].scrollIntoView(true)', button);
}).then(function () {
return button.click();
}).then(function () {
return browser.wait(until.elementLocated(by.xpath('//h3[contains(text(), "Success")]')), TEST_TIMEOUT);
}).then(function () {
console.log('Close the newly opened tab. Will wait for 20 seconds');
return browser.sleep(20000);
}).then(function () {
done();
});
}
function uploadVideo(done) {
browser.get('https://' + app.fqdn + '/videos/upload').then(function () {
return browser.findElement(by.xpath('//input[@id="videofile" and @type="file"]')).sendKeys(path.resolve(__dirname, './video.mp4'));
}).then(function () {
return browser.sleep(20000); // wait for upload
}).then(function () {
return browser.findElement(by.xpath('//input[@id="name"]')).sendKeys(Key.chord(Key.CONTROL, 'a'));
}).then(function () {
return browser.findElement(by.xpath('//input[@id="name"]')).sendKeys('Cloudron Test Video');
}).then(function () {
return browser.findElement(by.xpath('//span[text()="Publish"]')).click();
}).then(function () {
return browser.sleep(2000);
}).then(function () {
done();
});
}
function videoExists(done) {
browser.get('https://' + app.fqdn + '/my-account/videos').then(function () {
return browser.wait(until.elementLocated(by.xpath('//a[@title="Cloudron Test Video"]')), TEST_TIMEOUT);
}).then(function () {
return done();
});
}
xit('build app', function () { xit('build app', function () {
execSync('cloudron build', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron build', { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
}); });
it('install app', function () { it('install app', function (done) {
execSync('cloudron install --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron install --location ' + LOCATION, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
setTimeout(done, 10000); // takes a bit to create root user in background
}); });
it('can get app information', getAppInfo); it('can get app information', getAppInfo);
it('can login', login); it('can login', login);
it('can complete setup', completeSetup);
it('can upload video', uploadVideo);
it('video exists', videoExists);
it('backup app', function () { it('backup app', function () {
execSync('cloudron backup create --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron backup create --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
@ -103,13 +159,15 @@ describe('Application life cycle test', function () {
}); });
it('can login', login); it('can login', login);
it('video exists', videoExists);
it('can restart app', function () { it('can restart app', function () {
execSync('cloudron restart --app ' + app.id); execSync('cloudron restart --app ' + app.id);
}); });
it('can login', login); it('can login', login);
it('video exists', videoExists);
// this is not supported for federation
it('move to different location', function (done) { it('move to different location', function (done) {
execSync('cloudron configure --location ' + LOCATION + '2 --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron configure --location ' + LOCATION + '2 --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
done(); done();
@ -117,6 +175,7 @@ describe('Application life cycle test', function () {
it('can get app information', getAppInfo); it('can get app information', getAppInfo);
it('can login', login); it('can login', login);
it('video exists', videoExists);
it('uninstall app', function () { it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
@ -129,10 +188,15 @@ describe('Application life cycle test', function () {
it('can get app information', getAppInfo); it('can get app information', getAppInfo);
it('can login', login); it('can login', login);
it('can complete setup', completeSetup);
it('can upload video', uploadVideo);
it('video exists', videoExists);
it('can update', function () { it('can update', function () {
execSync('cloudron update --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron update --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });
}); });
it('can login', login);
it('video exists', videoExists);
it('uninstall app', function () { it('uninstall app', function () {
execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' }); execSync('cloudron uninstall --app ' + app.id, { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' });

BIN
test/video.mp4 Normal file

Binary file not shown.