diff options
Diffstat (limited to 'syweb/webclient/test')
-rw-r--r-- | syweb/webclient/test/README | 51 | ||||
-rw-r--r-- | syweb/webclient/test/e2e/home.spec.js | 16 | ||||
-rw-r--r-- | syweb/webclient/test/karma.conf.js | 91 | ||||
-rw-r--r-- | syweb/webclient/test/protractor.conf.js | 18 | ||||
-rw-r--r-- | syweb/webclient/test/unit/user-controller.spec.js | 57 |
5 files changed, 233 insertions, 0 deletions
diff --git a/syweb/webclient/test/README b/syweb/webclient/test/README new file mode 100644 index 0000000000..e7ed4eaa87 --- /dev/null +++ b/syweb/webclient/test/README @@ -0,0 +1,51 @@ +Testing is done using Karma. + + +UNIT TESTING +============ + +Requires the following: + - npm/nodejs + - phantomjs + +Requires the following node packages: + - npm install jasmine + - npm install karma + - npm install karma-jasmine + - npm install karma-phantomjs-launcher + - npm install karma-junit-reporter + +Make sure you're in this directory so it can find the config file and run: + karma start + +You should see all the tests pass. + + +E2E TESTING +=========== + +npm install protractor + + +Setting up e2e tests (only if you don't have a selenium server to run the tests +on. If you do, edit the config to point to that url): + + webdriver-manager update + webdriver-manager start + + Create a file "environment-protractor.js" in this directory and type: + module.exports = { + seleniumAddress: 'http://localhost:4444/wd/hub', + baseUrl: "http://localhost:8008", + username: "YOUR_TEST_USERNAME", + password: "YOUR_TEST_PASSWORD" + } + +Running e2e tests: + protractor protractor.conf.js + +NOTE: This will create a public room on the target home server. + + + + diff --git a/syweb/webclient/test/e2e/home.spec.js b/syweb/webclient/test/e2e/home.spec.js new file mode 100644 index 0000000000..470237d557 --- /dev/null +++ b/syweb/webclient/test/e2e/home.spec.js @@ -0,0 +1,16 @@ +var env = require("../environment-protractor.js"); + +describe("home page", function() { + + beforeEach(function() { + ptor = protractor.getInstance(); + // FIXME we use longpoll on the event stream, and I can't get $interval + // playing nicely with it. Patches welcome to fix this. + ptor.ignoreSynchronization = true; + }); + + it("should have a title", function() { + browser.get(env.baseUrl); + expect(browser.getTitle()).toEqual("[matrix]"); + }); +}); diff --git a/syweb/webclient/test/karma.conf.js b/syweb/webclient/test/karma.conf.js new file mode 100644 index 0000000000..083c7c7200 --- /dev/null +++ b/syweb/webclient/test/karma.conf.js @@ -0,0 +1,91 @@ +// Karma configuration +// Generated on Thu Sep 18 2014 14:25:57 GMT+0100 (BST) + +module.exports = function(config) { + config.set({ + + // base path that will be used to resolve all patterns (eg. files, exclude) + basePath: '', + + + // frameworks to use + // available frameworks: https://npmjs.org/browse/keyword/karma-adapter + frameworks: ['jasmine'], + + + // list of files / patterns to load in the browser + // XXX: Order is important, and doing /js/angular* makes the tests not run :/ + files: [ + '../js/jquery*', + '../js/angular.js', + '../js/angular-mocks.js', + '../js/angular-route.js', + '../js/angular-animate.js', + '../js/angular-sanitize.js', + '../js/ng-infinite-scroll-matrix.js', + '../js/ui-bootstrap*', + '../js/elastic.js', + '../login/**/*.*', + '../room/**/*.*', + '../components/**/*.*', + '../user/**/*.*', + '../home/**/*.*', + '../recents/**/*.*', + '../settings/**/*.*', + '../app.js', + '../app*', + './unit/**/*.js' + ], + + plugins: [ + 'karma-*', + ], + + + // list of files to exclude + exclude: [ + ], + + + // preprocess matching files before serving them to the browser + // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor + preprocessors: { + }, + + + // test results reporter to use + // possible values: 'dots', 'progress' + // available reporters: https://npmjs.org/browse/keyword/karma-reporter + reporters: ['progress', 'junit'], + junitReporter: { + outputFile: 'test-results.xml', + suite: '' + }, + + // web server port + port: 9876, + + + // enable / disable colors in the output (reporters and logs) + colors: true, + + + // level of logging + // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG + logLevel: config.LOG_DEBUG, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: true, + + + // start these browsers + // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher + browsers: ['PhantomJS'], + + + // Continuous Integration mode + // if true, Karma captures browsers, runs the tests and exits + singleRun: true + }); +}; diff --git a/syweb/webclient/test/protractor.conf.js b/syweb/webclient/test/protractor.conf.js new file mode 100644 index 0000000000..76ae7b712b --- /dev/null +++ b/syweb/webclient/test/protractor.conf.js @@ -0,0 +1,18 @@ +var env = require("./environment-protractor.js"); +exports.config = { + seleniumAddress: env.seleniumAddress, + specs: ['e2e/*.spec.js'], + onPrepare: function() { + browser.driver.get(env.baseUrl); + browser.driver.findElement(by.id("user_id")).sendKeys(env.username); + browser.driver.findElement(by.id("password")).sendKeys(env.password); + browser.driver.findElement(by.id("login")).click(); + + // wait till the login is done, detect via url change + browser.driver.wait(function() { + return browser.driver.getCurrentUrl().then(function(url) { + return !(/login/.test(url)) + }); + }); + } +} diff --git a/syweb/webclient/test/unit/user-controller.spec.js b/syweb/webclient/test/unit/user-controller.spec.js new file mode 100644 index 0000000000..798cc4de48 --- /dev/null +++ b/syweb/webclient/test/unit/user-controller.spec.js @@ -0,0 +1,57 @@ +describe("UserCtrl", function() { + var scope, ctrl, matrixService, routeParams, $q, $timeout; + var userId = "@foo:bar"; + var displayName = "Foo"; + var avatarUrl = "avatar.url"; + + beforeEach(module('matrixWebClient')); + + beforeEach(function() { + + inject(function($rootScope, $injector, $controller, _$q_, _$timeout_) { + $q = _$q_; + $timeout = _$timeout_; + + matrixService = { + config: function() { + return { + user_id: userId + }; + }, + + getDisplayName: function(uid) { + var d = $q.defer(); + d.resolve({ + data: { + displayname: displayName + } + }); + return d.promise; + }, + + getProfilePictureUrl: function(uid) { + var d = $q.defer(); + d.resolve({ + data: { + avatar_url: avatarUrl + } + }); + return d.promise; + } + }; + scope = $rootScope.$new(); + routeParams = { + user_matrix_id: userId + }; + ctrl = $controller('UserController', { + '$scope': scope, + '$routeParams': routeParams, + 'matrixService': matrixService + }); + }); + }); + + it('should display your user id', function() { + expect(scope.user_id).toEqual(userId); + }); +}); |