diff --git a/webclient/test/karma.conf.js b/webclient/test/karma.conf.js
new file mode 100644
index 0000000000..22c4eaaafa
--- /dev/null
+++ b/webclient/test/karma.conf.js
@@ -0,0 +1,82 @@
+// 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',
+ '../login/**/*.*',
+ '../room/**/*.*',
+ '../components/**/*.*',
+ '../user/**/*.*',
+ '../home/**/*.*',
+ '../recents/**/*.*',
+ '../settings/**/*.*',
+ '../app.js',
+ '../app*',
+ './unit/**/*.js'
+ ],
+
+
+ // 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'],
+
+
+ // 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: ['Chrome'],
+
+
+ // Continuous Integration mode
+ // if true, Karma captures browsers, runs the tests and exits
+ singleRun: false
+ });
+};
diff --git a/webclient/test/unit/user-controller.spec.js b/webclient/test/unit/user-controller.spec.js
new file mode 100644
index 0000000000..217559114b
--- /dev/null
+++ b/webclient/test/unit/user-controller.spec.js
@@ -0,0 +1,59 @@
+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();
+ // FIXME: everything goes into fire here
+ d.resolve({
+ data: {
+ displayname: displayName
+ }
+ });
+ return d;
+ },
+
+ getProfilePictureUrl: function(uid) {
+ var d = $q.defer();
+ d.resolve({
+ data: {
+ avatar_url: avatarUrl
+ }
+ });
+ return d;
+ }
+ };
+ scope = $rootScope.$new();
+ routeParams = {
+ user_matrix_id: userId
+ };
+ ctrl = $controller('UserController', {
+ '$scope': scope,
+ '$routeParams': routeParams,
+ 'matrixService': matrixService
+ });
+ console.log("end inject");
+ });
+ });
+
+ it('should display your user id', function() {
+ expect(scope.user_id).toEqual(userId);
+ });
+});
|