docker-registry-frontend/app/app.spec.js

171 lines
7.3 KiB
JavaScript
Raw Permalink Normal View History

Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
'use strict';
describe('docker-registry-frontend', function() {
var $route, $location, $rootScope, $httpBackend, $controller;
beforeEach(module('docker-registry-frontend'));
beforeEach(inject(function(_$route_, _$location_, _$rootScope_, _$httpBackend_, _$controller_) {
$route = _$route_;
$location = _$location_;
$rootScope = _$rootScope_;
$httpBackend = _$httpBackend_;
$controller = _$controller_;
}));
it('/home should display home page', function() {
$httpBackend.expectGET('home.html').respond(200);
$location.path('/home');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('home.html');
expect($route.current.controller).toBe('HomeController');
var scope = {};
var expectedAppMode = {
"browseOnly": true,
"defaultRepositoriesPerPage": 20,
"defaultTagsPerPage": 10
}
$controller('HomeController', {$scope: scope});
$httpBackend.expectGET('/app-mode.json').respond(expectedAppMode);
$httpBackend.flush();
jasmine.addCustomEqualityTester(angular.equals);
expect(scope.appMode).toEqual(expectedAppMode);
});
it('/repositories should display repository list page', function() {
$httpBackend.expectGET('repository/repository-list.html').respond(200);
$location.path('/repositories');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-list.html');
expect($route.current.controller).toBe('RepositoryListController');
var scope = {};
$controller('RepositoryListController', {$scope: scope});
expect(scope.reposPerPage).toBeUndefined();
});
it('/repositories/10 should display repository list page', function() {
$httpBackend.expectGET('repository/repository-list.html').respond(200);
$location.path('/repositories/10');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-list.html');
expect($route.current.controller).toBe('RepositoryListController');
var scope = {};
$controller('RepositoryListController', {$scope: scope});
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
expect(scope.reposPerPage).toBe(10);
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
});
it('/repositories/20 should display repository list page', function() {
$httpBackend.expectGET('repository/repository-list.html').respond(200);
$location.path('/repositories/20');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-list.html');
expect($route.current.controller).toBe('RepositoryListController');
var scope = {};
$controller('RepositoryListController', {$scope: scope});
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
expect(scope.reposPerPage).toBe(20);
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
});
it('URL with repositoryUser and repositoryName and no tagsPerPage should display repository detail page', function() {
$httpBackend.expectGET('repository/repository-detail.html').respond(200);
$location.path('/repository/owner/name');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-detail.html');
expect($route.current.controller).toBe('RepositoryDetailController');
var scope = {};
$controller('RepositoryDetailController', {$scope: scope});
expect(scope.repositoryUser).toBe('owner');
expect(scope.repositoryName).toBe('name');
expect(scope.repository).toBe('owner/name');
expect(scope.maxTagsPage).toBeUndefined();
});
it('URL with repositoryUser and repositoryName and tagsPerPage should display repository detail page', function() {
$httpBackend.expectGET('repository/repository-detail.html').respond(200);
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
$location.path('/repository/owner/name');
$location.search('tagsPerPage', 10)
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-detail.html');
expect($route.current.controller).toBe('RepositoryDetailController');
var scope = {};
$controller('RepositoryDetailController', {$scope: scope});
expect(scope.repositoryUser).toBe('owner');
expect(scope.repositoryName).toBe('name');
expect(scope.repository).toBe('owner/name');
});
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
it('URL with repositoryName but no repositoryUser and no tagsPerPage should display repository detail page', function() {
$httpBackend.expectGET('repository/repository-detail.html').respond(200);
$location.path('/repository/cx');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-detail.html');
expect($route.current.controller).toBe('RepositoryDetailController');
});
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
it('URL with repositoryName but no repositoryUser and tagsPerPage should display repository detail page', function() {
$httpBackend.expectGET('repository/repository-detail.html').respond(200);
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
$location.path('/repository/cx');
$location.search('tagsPerPage', 10)
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
$rootScope.$digest();
expect($route.current.templateUrl).toBe('repository/repository-detail.html');
expect($route.current.controller).toBe('RepositoryDetailController');
var scope = {};
$controller('RepositoryDetailController', {$scope: scope});
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
expect(scope.repositoryUser).toBeUndefined();
expect(scope.repositoryName).toBe('cx');
expect(scope.repository).toBe('cx');
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
});
it('/about should display about page', function() {
$httpBackend.expectGET('about.html').respond(200);
$location.path('/about');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('about.html');
});
it('/tag/repositoryUser/repositoryName/latest should display tag detail page', function() {
$httpBackend.expectGET('tag/tag-detail.html').respond(200);
$location.path('/tag/repositoryUser/repositoryName/latest');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('tag/tag-detail.html');
expect($route.current.controller).toBe('TagController');
var scope = {};
$controller('TagController', {$scope: scope});
expect(scope.repositoryUser).toBe('repositoryUser');
expect(scope.repositoryName).toBe('repositoryName');
expect(scope.repository).toBe('repositoryUser/repositoryName');
expect(scope.tagName).toBe('latest');
});
Handle images with no user properly (#147) * Uncomment test for no repositoryUser in `app/app.spec.js`, so I can work on getting this case working. * Add $log to repository-detail-controller * Set $scope.repository properly even if no user Check if `$scope.repositoryUser` is defined and if it's not, set `$scope.repository` simply to `$scope.repositoryName`. * Add route for repo with no repositoryUser * Make tagsPerPage dropdown use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Make first/next links use query string vars instead of putting `tagsPerPage` in the route part of the URL, which makes it difficult to distinguish between `repositoryName` and `tagsPerPage`, because the routes are too similar. * Move defaultTagsPerPage from `RepositoryListController` to `TagController`. I think it makes more sense to read `defaultTagsPerPage` in `TagController` than to do it in `RepositoryListController` and have to pass it in URLs. * Fix "Details for repository" for repo w/ no user * Fix breadcrumb when no repositoryUser * Remove tagsPerPage/tagPage from repo detail routes * Update unit tests to use tagsPerPage qs param Updated the unit tests to page `tagsPerPage` as a query string parameter rather than in the route. * Uncomment assertions about scope.reposPerPage an make them work by casting string to an int with `parseInt`. * Make /tag work for image with no repositoryUser * repository-detail.html: Fix breadcrumb link for case when there is no `repositoryUser`. * tag-detail.html: Fix breadcrumb link when image has no `repositoryUser`. * tag-detail.html: Fix shown docker pull command when image has no `repositoryUser`. * tag-detail.html: Show docker pull cmd in code font I think it looks better.
2016-08-04 23:16:32 +08:00
it('/tag/repositoryName/latest should display tag detail page', function() {
$httpBackend.expectGET('tag/tag-detail.html').respond(200);
$location.path('/tag/repositoryName/latest');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('tag/tag-detail.html');
expect($route.current.controller).toBe('TagController');
});
Make "npm test" run Karma tests (#140) * Make "npm test" run Karma tests Result is this: ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 13:36:20.771:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 13:36:20.781:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 13:36:20.782:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 13:36:20.788:INFO [launcher]: Starting browser PhantomJS 09 07 2016 13:36:21.250:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#Z4MF21dfMgThOi3zAAAA with id 9538616 PhantomJS 2.1.1 (Mac OS X 0.0.0) Controller: MainCtrl should attach a list of awesomeThings to the scope FAILED forEach@bower_components/angular/angular.js:326:24 loadModules@bower_components/angular/angular.js:4115:12 createInjector@bower_components/angular/angular.js:4041:22 workFn@bower_components/angular-mocks/angular-mocks.js:2464:60 loaded@http://localhost:8080/context.js:151:17 bower_components/angular/angular.js:4155:53 TypeError: undefined is not an object (evaluating 'scope.awesomeThings') in test/spec/controllers/main.js (line 20) test/spec/controllers/main.js:20:17 loaded@http://localhost:8080/context.js:151:17 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.005 secs / 0.006 secs) ``` Fixes #139 * Make MainController tests work This makes the `MainController` tests pass. ``` $ npm test > docker-registry-frontend@0.0.2 pretest /Users/marca/dev/git-repos/docker-registry-frontend_2 > npm install > docker-registry-frontend@0.0.2 postinstall /Users/marca/dev/git-repos/docker-registry-frontend_2 > bower install > docker-registry-frontend@0.0.2 test /Users/marca/dev/git-repos/docker-registry-frontend_2 > karma start test/karma.conf.js 09 07 2016 17:06:59.974:WARN [karma]: No captured browser, open http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [karma]: Karma v1.1.1 server started at http://localhost:8080/ 09 07 2016 17:06:59.986:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency 09 07 2016 17:07:00.133:INFO [launcher]: Starting browser PhantomJS 09 07 2016 17:07:01.051:INFO [PhantomJS 2.1.1 (Mac OS X 0.0.0)]: Connected on socket /#6enEIdsugSVdKVioAAAA with id 62465837 PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 SUCCESS (0.004 secs / 0.024 secs) ``` * test/karma.conf.js: Add more files E.g.: - angular-bootstrap, - angular-bootstrap-checkbox - angular-filter - angular-loading-bar - angular-moment - angular-smart-table I also alphabetized the list to make it easier to check if something is already included. * test/karma.conf.js: Add 'dots' reporter * Add app/app.spec.js `app/app.spec.js` contains tests for various routes, which should be very useful for finding and fixing routing bugs. See: - #97 - #100 - #104 - #121 * Enable junit and spec Karma reporters * app/app.spec.js: Check scope attributes * app/app.spec.js: Check scope.appMode * test/spec/controllers/main.js: Check appVersion & registryHost * MainController: use registry-services In `MainController`, depend on the `registry-services` module instead of the `registry-host-services` module. * Remove app/services/registry-host-services.js Remove `app/services/registry-host-services.js` because it seems to be an older, unused version of `app/services/registry-services.js` * repository-list-controller: Add dependencies Specify that the `repository-list-controller` module depends on `ngRoute` and `ui.bootstrap` modules. Otherwise controller tests of this module fail. * $scope.repositories = data; In `repository-list-controller`, do: $scope.repositories = data; in the promise callback. Otherwise, the new tests in `app/repository/repository-list-controller.spec.js` fail. This is because promises get resolved in templates but not in until tests -- see http://stackoverflow.com/questions/15048132/angularjs-promise-not-being-resolved-in-unit-test * Add unit test for RepositoryListController in `app/repository/repository-list-controller.spec.js`. RepositoryListController ✓ should attach some keys to the scope * Gruntfile.js: Use DOCKER_REGISTRY_{HOST,PORT} Use `DOCKER_REGISTRY_HOST` and `DOCKER_REGISTRY_PORT` environment variables so that one can specify a custom Docker registry server while developing, without hacking `Gruntfile.js`.
2016-07-19 14:41:24 +08:00
it('/image/88e37c7099fa should display image detail page', function() {
$httpBackend.expectGET('tag/image-detail.html').respond(200);
$location.path('/image/88e37c7099fa');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('tag/image-detail.html');
expect($route.current.controller).toBe('ImageController');
});
it('/image/88e37c7099fa/tag should display create tag page', function() {
$httpBackend.expectGET('tag/create-tag.html').respond(200);
$location.path('/image/88e37c7099fa/tag');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('tag/create-tag.html');
expect($route.current.controller).toBe('CreateTagController');
});
it('/unknown-url should display home page', function() {
$httpBackend.expectGET('home.html').respond(200);
$location.path('/unknown-url');
$rootScope.$digest();
expect($route.current.templateUrl).toBe('home.html');
expect($route.current.controller).toBe('HomeController');
});
});