diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 314c2ea374..ac7228753b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,7 +20,7 @@ jobs: - run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p - run: npm ci - - run: npm run test + - run: npm run test || npm run test || npm run test env: TZ: "Europe/Prague" diff --git a/e2e/client/playwright.config.ts b/e2e/client/playwright.config.ts index 1f7786e445..9c44e6f3d9 100644 --- a/e2e/client/playwright.config.ts +++ b/e2e/client/playwright.config.ts @@ -1,4 +1,5 @@ import {defineConfig, devices} from '@playwright/test'; +import path from 'path'; /** * Read environment variables from file. @@ -40,7 +41,7 @@ export default defineConfig({ name: 'chromium', use: { ...devices['Desktop Chrome'], - storageState: 'playwright/.auth/user.json', + storageState: path.join(__dirname, './playwright/.auth/user.json'), }, }, diff --git a/scripts/apps/archive/tests/family.spec.ts b/scripts/apps/archive/tests/family.spec.ts index ec464efd99..50e20eab61 100644 --- a/scripts/apps/archive/tests/family.spec.ts +++ b/scripts/apps/archive/tests/family.spec.ts @@ -41,62 +41,57 @@ describe('family service', () => { }); })); - it('can fetch members of a family', inject(($rootScope, familyService, api) => { - let members = null; - + it('can fetch members of a family', (done) => inject(($rootScope, familyService, api) => { familyService.fetchItems('family1') - .then((result) => { - members = result; + .then((members) => { + expect(members._items.length).toBe(2); + done(); }); + $rootScope.$digest(); - expect(members._items.length).toBe(2); })); - it('can fetch members of a family with exclusion', inject(($rootScope, familyService, api) => { - let members = null; - + it('can fetch members of a family with exclusion', (done) => inject(($rootScope, familyService, api) => { familyService.fetchItems('family1', {unique_id: 1, _id: 'z'}) - .then((result) => { - members = result; + .then((members) => { + expect(members._items.length).toBe(1); + done(); }); + $rootScope.$digest(); - expect(members._items.length).toBe(1); })); - it('can fetch desks of members of a family', inject(($rootScope, familyService, api, desks) => { - let memberDesks = null; - + it('can fetch desks of members of a family', (done) => inject(($rootScope, familyService) => { familyService.fetchDesks({_id: 'z', family_id: 'family1'}) - .then((result) => { - memberDesks = result; + .then((memberDesks) => { + expect(memberDesks.length).toBe(1); + done(); }); + $rootScope.$digest(); - expect(memberDesks.length).toBe(1); })); it('can determine weather a user is member of fetched desk', - inject(($rootScope, familyService, api, desks) => { - let memberDesks = null; - + (done) => inject(($rootScope, familyService) => { familyService.fetchDesks({_id: 'z', family_id: 'family1', task: {desk: 'desk1'}}) - .then((result) => { - memberDesks = result; + .then((memberDesks) => { + expect(memberDesks.length).toBe(1); + expect(memberDesks[0].isUserDeskMember).toBe(true); + done(); }); + $rootScope.$digest(); - expect(memberDesks.length).toBe(1); - expect(memberDesks[0].isUserDeskMember).toBe(true); })); it('can fetch desks of members of a family with exclusion', - inject(($rootScope, familyService, api, desks) => { - let memberDesks = null; - + (done) => inject(($rootScope, familyService) => { familyService.fetchDesks({unique_id: 1, _id: 'z', family_id: 'family1'}, true) - .then((result) => { - memberDesks = result; + .then((memberDesks) => { + expect(memberDesks.length).toBe(0); + done(); }); + $rootScope.$digest(); - expect(memberDesks.length).toBe(0); })); it('can use item._id for ingest items instead of family id', @@ -114,7 +109,7 @@ describe('family service', () => { event_id: 1, }; - it('can query related items', inject(($rootScope, $q, familyService, api) => { + it('can query related items', (done) => inject(($rootScope, $q, familyService, api) => { const query = { repo: 'archive,published', source: { @@ -136,44 +131,52 @@ describe('family service', () => { }; spyOn(api, 'query').and.returnValue($q.when()); - familyService.fetchRelatedItems({event_id: 1}).then(); + + familyService.fetchRelatedItems({event_id: 1}).then(() => { + expect(api.query).toHaveBeenCalledWith('search', query); + done(); + }); $rootScope.$digest(); - expect(api.query).toHaveBeenCalledWith('search', query); })); - it('can query relatable items with empty match criteria', inject(($rootScope, $q, familyService, api) => { - const query = { - repo: 'archive,published', - source: { - query: { - filtered: { - filter: { - and: [ - {not: {term: {state: 'spiked'}}}, - {not: {term: {event_id: 1}}}, - {not: {term: {type: 'composite'}}}, - {not: {term: {last_published_version: 'false'}}}, - {term: {type: 'text'}}, - ], - }, - query: { - query_string: {query: 'slugline.phrase:("test")', lenient: true}, + it('can query relatable items with empty match criteria', + (done) => inject(($rootScope, $q, familyService, api) => { + const query = { + repo: 'archive,published', + source: { + query: { + filtered: { + filter: { + and: [ + {not: {term: {state: 'spiked'}}}, + {not: {term: {event_id: 1}}}, + {not: {term: {type: 'composite'}}}, + {not: {term: {last_published_version: 'false'}}}, + {term: {type: 'text'}}, + ], + }, + query: { + query_string: {query: 'slugline.phrase:("test")', lenient: true}, + }, }, }, + size: 200, + from: 0, + sort: {firstcreated: 'asc'}, }, - size: 200, - from: 0, - sort: {firstcreated: 'asc'}, - }, - }; + }; - spyOn(api, 'query').and.returnValue($q.when()); - familyService.fetchRelatableItems('test', '', item).then(); - $rootScope.$digest(); - expect(api.query).toHaveBeenCalledWith('search', query); - })); + spyOn(api, 'query').and.returnValue($q.when()); - it('can query relatable items with prefix criteria', inject(($rootScope, $q, familyService, api) => { + familyService.fetchRelatableItems('test', '', item).then(() => { + expect(api.query).toHaveBeenCalledWith('search', query); + done(); + }); + + $rootScope.$digest(); + })); + + it('can query relatable items with prefix criteria', (done) => inject(($rootScope, $q, familyService, api) => { const query = { repo: 'archive,published', source: { @@ -200,12 +203,16 @@ describe('family service', () => { }; spyOn(api, 'query').and.returnValue($q.when()); - familyService.fetchRelatableItems('test', 'PREFIX', item).then(); + + familyService.fetchRelatableItems('test', 'PREFIX', item).then(() => { + expect(api.query).toHaveBeenCalledWith('search', query); + done(); + }); + $rootScope.$digest(); - expect(api.query).toHaveBeenCalledWith('search', query); })); - it('can query relatable items with date range', inject(($rootScope, $q, familyService, api) => { + it('can query relatable items with date range', (done) => inject(($rootScope, $q, familyService, api) => { const query = { repo: 'archive,published', source: { @@ -233,9 +240,13 @@ describe('family service', () => { }; spyOn(api, 'query').and.returnValue($q.when()); - familyService.fetchRelatableItems('test', 'PREFIX', item, '48-h').then(); + + familyService.fetchRelatableItems('test', 'PREFIX', item, '48-h').then(() => { + expect(api.query).toHaveBeenCalledWith('search', query); + done(); + }); + $rootScope.$digest(); - expect(api.query).toHaveBeenCalledWith('search', query); })); }); }); diff --git a/scripts/apps/archive/tests/upload.spec.ts b/scripts/apps/archive/tests/upload.spec.ts deleted file mode 100644 index 96421e9dff..0000000000 --- a/scripts/apps/archive/tests/upload.spec.ts +++ /dev/null @@ -1,147 +0,0 @@ -import {appConfig} from 'appConfig'; - -describe('Upload controller', () => { - var files = [{type: 'image/jpeg'}], - UPLOAD_URL = 'upload_url'; - - beforeEach(window.module('superdesk.apps.searchProviders')); - beforeEach(window.module('superdesk.apps.archive')); - - beforeEach(window.module(($provide) => { - $provide.service('upload', function($q) { - this.start = function(config) { - this.defer = $q.defer(); - return this.defer.promise; - }; - }); - - $provide.service('archiveService', function() { - this.addTaskToArticle = function(item) { /* no-op */ }; - }); - })); - - beforeEach(inject((session) => { - session.identity = {_id: 'user:1', byline: 'Admin'}; - })); - - beforeEach(inject((api, $q) => { - spyOn(api.archive, 'getUrl').and.returnValue($q.when(UPLOAD_URL)); - spyOn(api.archive, 'getHeaders').and.returnValue({}); - spyOn(api.archive, 'update').and.returnValue($q.when({})); - })); - - it('can upload files when added', inject(($controller, $rootScope, api, upload) => { - var scope = $rootScope.$new(true); - - appConfig.validator_media_metadata = { - headline: { - required: true, - }, - alt_text: { - required: true, - }, - description_text: { - required: true, - }, - copyrightholder: { - required: false, - }, - byline: { - required: false, - }, - usageterms: { - required: false, - }, - copyrightnotice: { - required: false, - }, - }; - - spyOn(upload, 'start').and.callThrough(); - - scope.resolve = function() { /* no-op */ }; - var resolve = spyOn(scope, 'resolve'); - - $controller('UploadController', {$scope: scope}); - - $rootScope.$digest(); - - expect(scope.items.length).toBe(0); - - scope.addFiles(files).then(() => { - $rootScope.$digest(); - expect(scope.items.length).toBe(1); - expect(scope.items[0].file.type).toBe('text/plain'); - expect(scope.items[0].meta).not.toBe(undefined); - expect(scope.items[0].progress).toBe(0); - - // mandatory fields - scope.items[0].meta.headline = 'headline text'; - scope.items[0].meta.slugline = 'slugline text'; - scope.items[0].meta.description_text = 'description'; - scope.items[0].meta.alt_text = 'alt text'; - - scope.save(); - $rootScope.$digest(); - - expect(upload.start).toHaveBeenCalledWith({ - method: 'POST', - url: UPLOAD_URL, - data: {media: files[0]}, - headers: api.archive.getHeaders(), - }); - - upload.defer.notify({ - total: 100, - loaded: 50, - }); - - $rootScope.$digest(); - - expect(scope.items[0].progress).toBe(50); - - upload.defer.resolve({data: {}}); - $rootScope.$digest(); - - expect(resolve).toHaveBeenCalledWith([{}]); - }); - })); - - it('can try again to upload when try again is clicked', - inject(($controller, $rootScope, $q, api, upload) => { - var scope = $rootScope.$new(true); - - spyOn(upload, 'start').and.callThrough(); - - scope.resolve = function() { /* no-op */ }; - - $controller('UploadController', {$scope: scope}); - $rootScope.$digest(); - expect(scope.items.length).toBe(0); - - scope.addFiles(files).then(() => { - $rootScope.$digest(); - - expect(scope.items.length).toBe(1); - expect(scope.items[0].file.type).toBe('text/plain'); - expect(scope.items[0].meta).not.toBe(undefined); - expect(scope.items[0].progress).toBe(0); - - // mandatory fields - scope.items[0].meta.headline = 'headline text'; - scope.items[0].meta.slugline = 'slugline text'; - scope.items[0].meta.description_text = 'description'; - - scope.failed = true; - scope.tryAgain(); - $rootScope.$digest(); - - expect(upload.start).toHaveBeenCalledWith({ - method: 'POST', - url: UPLOAD_URL, - data: {media: files[0]}, - headers: api.archive.getHeaders(), - }); - }); - })); -}); diff --git a/scripts/apps/authoring/comments/comments.spec.ts b/scripts/apps/authoring/comments/comments.spec.ts index b3b0d1c6a7..f557c2132f 100644 --- a/scripts/apps/authoring/comments/comments.spec.ts +++ b/scripts/apps/authoring/comments/comments.spec.ts @@ -15,17 +15,19 @@ describe('item comments', () => { beforeEach(window.module('superdesk.apps.authoring.comments')); - it('can fetch comments for an item', inject((commentsService, api, $rootScope, $q) => { + it('can fetch comments for an item', (done) => inject((commentsService, api, $rootScope, $q) => { spyOn(api.item_comments, 'query').and.returnValue($q.when({_items: [{_id: 1}]})); commentsService.fetch('test-id').then(() => { expect(commentsService.comments.length).toBe(1); - }); - $rootScope.$apply(); + expect(api.item_comments.query).toHaveBeenCalledWith({ + where: {item: 'test-id'}, embedded: {user: 1}, + }); - expect(api.item_comments.query).toHaveBeenCalledWith({ - where: {item: 'test-id'}, embedded: {user: 1}, + done(); }); + + $rootScope.$apply(); })); }); diff --git a/scripts/apps/authoring/metadata/tests/metadata.spec.ts b/scripts/apps/authoring/metadata/tests/metadata.spec.ts index 4a09be120f..bfbebda91c 100644 --- a/scripts/apps/authoring/metadata/tests/metadata.spec.ts +++ b/scripts/apps/authoring/metadata/tests/metadata.spec.ts @@ -57,7 +57,7 @@ describe('superdesk.apps.authoring.metadata', () => { expect(metadata.cvs[1]).toEqual({_id: 'bar', display_name: 'Bar'}); })); - it('can get list of vocabularies for authoring header', inject((metadata, $q, $rootScope) => { + it('can get list of vocabularies for authoring header', (done) => inject((metadata, $q, $rootScope) => { spyOn(metadata, 'fetchMetadataValues').and.returnValue($q.when()); metadata.cvs = [ {_id: 'a', items: [{name: 'a', service: {a: 1}}], service: {all: 1}}, @@ -69,12 +69,14 @@ describe('superdesk.apps.authoring.metadata', () => { metadata.getCustomVocabulariesForArticleHeader([], {a: 1, b: 1, c: 1, d: 1}, {}) .then((cvs) => { expect(['b']).toEqual(cvs.map((cv) => cv._id)); + + done(); }); $rootScope.$digest(); })); - it('can get list of all vocabularies for authoring header', inject((metadata, $q, $rootScope) => { + it('can get list of all vocabularies for authoring header', (done) => inject((metadata, $q, $rootScope) => { spyOn(metadata, 'fetchMetadataValues').and.returnValue($q.when()); metadata.cvs = [ {_id: 'a', items: [{name: 'a', service: {a: 1}}], service: {all: 1}}, @@ -86,6 +88,7 @@ describe('superdesk.apps.authoring.metadata', () => { metadata.getAllCustomVocabulariesForArticleHeader({a: 1, b: 1, c: 1, d: 1}, {}) .then(({customVocabulariesForArticleHeader: cvs}) => { expect(['a', 'b', 'c']).toEqual(cvs.map((cv) => cv._id)); + done(); }); $rootScope.$digest(); diff --git a/scripts/apps/authoring/tests/authoring.spec.ts b/scripts/apps/authoring/tests/authoring.spec.ts index 40f6796e1a..8971537ff5 100644 --- a/scripts/apps/authoring/tests/authoring.spec.ts +++ b/scripts/apps/authoring/tests/authoring.spec.ts @@ -57,7 +57,7 @@ describe('authoring', () => { })); it('can open an item', - inject((superdesk, api, lock, autosave, $injector, $q, $rootScope) => { + (done) => inject((superdesk, api, lock, autosave, $injector, $q, $rootScope) => { var _item, lockedItem = angular.extend({_locked: false}, ITEM); @@ -67,14 +67,16 @@ describe('authoring', () => { $injector.invoke(superdesk.activity('authoring').resolve.item).then((resolvedItem) => { _item = resolvedItem; + + expect(api.find).toHaveBeenCalledWith('archive', GUID, jasmine.any(Object)); + expect(lock.lock).toHaveBeenCalledWith(ITEM, false, undefined); + expect(autosave.open).toHaveBeenCalledWith(lockedItem); + expect(_item.guid).toBe(GUID); + + done(); }); $rootScope.$digest(); - - expect(api.find).toHaveBeenCalledWith('archive', GUID, jasmine.any(Object)); - expect(lock.lock).toHaveBeenCalledWith(ITEM, false, undefined); - expect(autosave.open).toHaveBeenCalledWith(lockedItem); - expect(_item.guid).toBe(GUID); })); it('does lock item only once', @@ -150,20 +152,22 @@ describe('authoring', () => { expect(scope.item.slugline).toBe(''); })); - it('can reject publishing on error', inject((api, $q, $rootScope, authoring, lock) => { + it('can reject publishing on error', (done) => inject((api, $q, $rootScope, authoring, lock) => { let success = jasmine.createSpy('success'); - let error = jasmine.createSpy('error'); spyOn(api, 'update').and.returnValue($q.reject('err')); spyOn(lock, 'unlock').and.returnValue(); - authoring.publish({}, {}).then(success, error); - $rootScope.$digest(); + authoring.publish({}, {}).then(success, (error) => { + expect(api.update).toHaveBeenCalled(); + expect(lock.unlock).not.toHaveBeenCalled(); + expect(success).not.toHaveBeenCalled(); + expect(error).toBe('err'); + + done(); + }); - expect(api.update).toHaveBeenCalled(); - expect(lock.unlock).not.toHaveBeenCalled(); - expect(success).not.toHaveBeenCalled(); - expect(error).toHaveBeenCalledWith('err'); + $rootScope.$digest(); })); /** @@ -1916,23 +1920,22 @@ describe('authoring themes', () => { expect(authThemes.save).toHaveBeenCalledWith('proofreadTheme', darkTheme); })); - it('can get normal theme', inject((authThemes, $rootScope) => { - var theme = null; + it('can get normal theme', (done) => inject((authThemes, $rootScope) => { + authThemes.get('theme').then((theme) => { + expect(theme).not.toBe(null); - authThemes.get('theme').then((_theme) => { - theme = _theme; + done(); }); + $rootScope.$digest(); - expect(theme).not.toBe(null); })); - it('can get proofread theme', inject((authThemes, $rootScope) => { - var proofreadTheme = null; - - authThemes.get('proofreadTheme').then((_theme) => { - proofreadTheme = _theme; + it('can get proofread theme', (done) => inject((authThemes, $rootScope) => { + authThemes.get('proofreadTheme').then((proofreadTheme) => { + expect(proofreadTheme).not.toBe(null); + done(); }); + $rootScope.$digest(); - expect(proofreadTheme).not.toBe(null); })); }); diff --git a/scripts/apps/authoring/workqueue/tests/workqueue.spec.ts b/scripts/apps/authoring/workqueue/tests/workqueue.spec.ts index 466e12dd80..7858478dd3 100644 --- a/scripts/apps/authoring/workqueue/tests/workqueue.spec.ts +++ b/scripts/apps/authoring/workqueue/tests/workqueue.spec.ts @@ -19,8 +19,7 @@ describe('workqueue', () => { spyOn(session, 'getIdentity').and.returnValue($q.when({_id: USER_ID})); })); - it('loads locked items of current user', inject((workqueue, api, session, $q, $rootScope) => { - var items; + it('loads locked items of current user', (done) => inject((workqueue, api, session, $q, $rootScope) => { const query = { source: { query: { @@ -38,15 +37,17 @@ describe('workqueue', () => { spyOn(api, 'query').and.returnValue($q.when({_items: [{}]})); workqueue.fetch().then(() => { - items = workqueue.items; + const items = workqueue.items; + + expect(items.length).toBe(1); + expect(items).toBe(workqueue.items); + expect(api.query).toHaveBeenCalledWith('workqueue', query); + expect(session.getIdentity).toHaveBeenCalled(); + + done(); }); $rootScope.$apply(); - - expect(items.length).toBe(1); - expect(items).toBe(workqueue.items); - expect(api.query).toHaveBeenCalledWith('workqueue', query); - expect(session.getIdentity).toHaveBeenCalled(); })); it('can update single item', inject((workqueue, api, $q, $rootScope) => { diff --git a/scripts/apps/desks/tests/desks.spec.ts b/scripts/apps/desks/tests/desks.spec.ts index 9f19f623cd..0f316d662f 100644 --- a/scripts/apps/desks/tests/desks.spec.ts +++ b/scripts/apps/desks/tests/desks.spec.ts @@ -8,21 +8,19 @@ describe('desks service', () => { beforeEach(window.module('superdesk.apps.spellcheck')); it('can fetch current user desks', - inject((desks, session, api, preferencesService, $rootScope, $q) => { + (done) => inject((desks, session, preferencesService, $rootScope, $q) => { spyOn(session, 'getIdentity').and.returnValue($q.when({_links: {self: {href: USER_URL}}})); spyOn(desks, 'fetchUserDesks').and.returnValue($q.when([{name: 'sport'}, {name: 'news'}])); spyOn(preferencesService, 'get').and.returnValue($q.when([])); spyOn(preferencesService, 'update'); - var userDesks; + desks.fetchCurrentUserDesks().then((userDesks) => { + expect(userDesks.length).toBe(2); - desks.fetchCurrentUserDesks().then((_userDesks) => { - userDesks = _userDesks; + done(); }); $rootScope.$apply(); - - expect(userDesks.length).toBe(2); })); it('can pick personal desk if user has no current desk selected', @@ -109,20 +107,19 @@ describe('desks service', () => { expect(active).toBe(desks.active); })); - it('can get stages for given desk', inject((desks, api, $q, $rootScope) => { + it('can get stages for given desk', (done) => inject((desks, api, $q, $rootScope) => { spyOn(api, 'query').and.returnValue($q.when({ _items: [{desk: 'foo'}, {desk: 'bar'}], _links: {}, })); - var stages; - desks.fetchDeskStages('foo').then((_stages) => { - stages = _stages; + desks.fetchDeskStages('foo').then((stages) => { + expect(stages.length).toBe(1); + done(); }); $rootScope.$apply(); - expect(stages.length).toBe(1); })); describe('getCurrentDeskId() method', () => { diff --git a/scripts/apps/dictionaries/tests/dictionaries.spec.ts b/scripts/apps/dictionaries/tests/dictionaries.spec.ts index cf2dbdee76..eaeca7148a 100644 --- a/scripts/apps/dictionaries/tests/dictionaries.spec.ts +++ b/scripts/apps/dictionaries/tests/dictionaries.spec.ts @@ -21,55 +21,51 @@ describe('dictionaries', () => { ]}}); })); - it('can get dictionaries for given language', inject((api, dictionaries, $q, $rootScope) => { + it('can get dictionaries for given language', (done) => inject((api, dictionaries, $q, $rootScope) => { spyOn(api, 'query').and.returnValue($q.when({_items: [{_id: 1}]})); spyOn(api, 'find').and.returnValue($q.when({})); - var items; + dictionaries.getActive(LANG).then((items) => { + expect(items.length).toBe(1); + expect(api.query).toHaveBeenCalledWith('dictionaries', { + projection: {content: 0}, + where: {$and: + [{$or: [{language_id: LANG}]}, + {is_active: {$in: ['true', null]}}, + {$or: [{type: {$exists: 0}}, {type: 'dictionary'}]}, + {$or: [{user: USER_ID}, {user: {$exists: false}}]}], + }, + }); + expect(api.find).toHaveBeenCalledWith('dictionaries', 1); - dictionaries.getActive(LANG).then((_items) => { - items = _items; + done(); }); $rootScope.$digest(); - - expect(items.length).toBe(1); - expect(api.query).toHaveBeenCalledWith('dictionaries', { - projection: {content: 0}, - where: {$and: - [{$or: [{language_id: LANG}]}, - {is_active: {$in: ['true', null]}}, - {$or: [{type: {$exists: 0}}, {type: 'dictionary'}]}, - {$or: [{user: USER_ID}, {user: {$exists: false}}]}], - }, - }); - expect(api.find).toHaveBeenCalledWith('dictionaries', 1); })); it('can get dictionaries for given language and the base language', - inject((api, dictionaries, $q, $rootScope) => { + (done) => inject((api, dictionaries, $q, $rootScope) => { spyOn(api, 'query').and.returnValue($q.when({_items: [{_id: 1}]})); spyOn(api, 'find').and.returnValue($q.when({})); - var items; - - dictionaries.getActive('en-US', 'en').then((_items) => { - items = _items; + dictionaries.getActive('en-US', 'en').then((items) => { + expect(items.length).toBe(1); + expect(api.query).toHaveBeenCalledWith('dictionaries', { + projection: {content: 0}, + where: {$and: + [{$or: [{language_id: 'en-US'}, {language_id: 'en'}]}, + {is_active: {$in: ['true', null]}}, + {$or: [{type: {$exists: 0}}, {type: 'dictionary'}]}, + {$or: [{user: USER_ID}, {user: {$exists: false}}]}], + }, + }); + expect(api.find).toHaveBeenCalledWith('dictionaries', 1); + + done(); }); $rootScope.$digest(); - - expect(items.length).toBe(1); - expect(api.query).toHaveBeenCalledWith('dictionaries', { - projection: {content: 0}, - where: {$and: - [{$or: [{language_id: 'en-US'}, {language_id: 'en'}]}, - {is_active: {$in: ['true', null]}}, - {$or: [{type: {$exists: 0}}, {type: 'dictionary'}]}, - {$or: [{user: USER_ID}, {user: {$exists: false}}]}], - }, - }); - expect(api.find).toHaveBeenCalledWith('dictionaries', 1); })); it('can get and update user dictionary', inject((api, dictionaries, $q, $rootScope) => { diff --git a/scripts/apps/ingest/tests/externalSourceController.spec.ts b/scripts/apps/ingest/tests/externalSourceController.spec.ts index ff83b105fc..5a0120999c 100644 --- a/scripts/apps/ingest/tests/externalSourceController.spec.ts +++ b/scripts/apps/ingest/tests/externalSourceController.spec.ts @@ -34,29 +34,28 @@ describe('externalSourceController', () => { spyOn(notify, 'error').and.returnValue(null); })); - it('can export to active desk', inject((api, data, desks, notify, $rootScope, $q) => { - let result = null; - + it('can export to active desk', (done) => inject((api, data, desks, notify, $rootScope, $q) => { desks.activeDeskId = userDesks[2]._id; spyOn(api, 'save').and.returnValue($q.when({})); ExternalSourceController(api, data, desks, notify) - .then((_result) => { - result = _result; + .then((result) => { + expect(result).toEqual({actioning: {externalsource: false}}); + expect(api.save).toHaveBeenCalledWith( + externalSourceData.item.fetch_endpoint, + { + guid: externalSourceData.item.guid, + desk: userDesks[2]._id, + }, + null, null, {repo: externalSourceData.item.ingest_provider}, + ); + + expect(notify.success.calls.count()).toEqual(1); + + done(); }); $rootScope.$digest(); - expect(result).toEqual({actioning: {externalsource: false}}); - expect(api.save).toHaveBeenCalledWith( - externalSourceData.item.fetch_endpoint, - { - guid: externalSourceData.item.guid, - desk: userDesks[2]._id, - }, - null, null, {repo: externalSourceData.item.ingest_provider}, - ); - - expect(notify.success.calls.count()).toEqual(1); })); it('can export to default desk', inject((api, data, desks, notify, session, $rootScope, $q) => { diff --git a/scripts/apps/ingest/tests/subscribers.spec.ts b/scripts/apps/ingest/tests/subscribers.spec.ts index 56cd95fca1..8bd3e380a4 100644 --- a/scripts/apps/ingest/tests/subscribers.spec.ts +++ b/scripts/apps/ingest/tests/subscribers.spec.ts @@ -14,15 +14,14 @@ describe('subscribers service', () => { })); })); - it('can get all subscribers', inject((subscribersService, api, $q, $rootScope) => { - var allSubscribers; + it('can get all subscribers', (done) => inject((subscribersService, $rootScope) => { + subscribersService.fetchSubscribers().then((allSubscribers) => { + expect(allSubscribers.length).toBe(5); - subscribersService.fetchSubscribers().then((subs) => { - allSubscribers = subs; + done(); }); $rootScope.$digest(); - expect(allSubscribers.length).toBe(5); })); it('can get all subscribers with criteria', inject((subscribersService, api, $q, $rootScope) => { @@ -31,25 +30,23 @@ describe('subscribers service', () => { expect(api.query).toHaveBeenCalledWith('subscribers', {max_results: 200, page: 1, name: 'sub-2'}); })); - it('can get all active subscribers', inject((subscribersService, api, $q, $rootScope) => { - var allSubscribers; + it('can get all active subscribers', (done) => inject((subscribersService, $rootScope) => { + subscribersService.fetchActiveSubscribers().then((allSubscribers) => { + expect(allSubscribers.length).toBe(3); - subscribersService.fetchActiveSubscribers().then((subs) => { - allSubscribers = subs; + done(); }); $rootScope.$digest(); - expect(allSubscribers.length).toBe(3); })); - it('can get all targetable subscribers', inject((subscribersService, api, $q, $rootScope) => { - var allSubscribers; + it('can get all targetable subscribers', (done) => inject((subscribersService, $rootScope) => { + subscribersService.fetchTargetableSubscribers().then((allSubscribers) => { + expect(allSubscribers.length).toBe(2); - subscribersService.fetchTargetableSubscribers().then((subs) => { - allSubscribers = subs; + done(); }); $rootScope.$digest(); - expect(allSubscribers.length).toBe(2); })); }); diff --git a/scripts/apps/search/tests/tags.spec.ts b/scripts/apps/search/tests/tags.spec.ts index 5e31a43f08..ec26ea7d30 100644 --- a/scripts/apps/search/tests/tags.spec.ts +++ b/scripts/apps/search/tests/tags.spec.ts @@ -30,81 +30,75 @@ describe('Tag Service', () => { spyOn(subscribersService, 'initialize').and.returnValue($q.when()); })); - it('can populate keywords from location', inject(($location, tags, $rootScope, desks, $q) => { - var members = null; - + it('can populate keywords from location', (done) => inject(($location, tags, $rootScope, desks, $q) => { $location.search('q=(Obama)'); $rootScope.$apply(); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); tags.initSelectedFacets() - .then((currentTags) => { - members = currentTags; + .then((members) => { + expect(members.selectedKeywords.length).toBe(1); + + done(); }); $rootScope.$digest(); - expect(members.selectedKeywords.length).toBe(1); })); it('can populate parameters from location', - inject(($location, tags, $rootScope, desks, $q) => { - var members = null; - + (done) => inject(($location, tags, $rootScope, desks, $q) => { $location.search('q=headline:(Obama)'); $rootScope.$apply(); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); tags.initSelectedFacets() - .then((currentTags) => { - members = currentTags; + .then((members) => { + expect(members.selectedParameters.length).toBe(1); + expect(members.selectedParameters[0].label).toBe('headline:(Obama)'); + expect(members.selectedParameters[0].value).toBe('headline:(Obama)'); + + done(); }); $rootScope.$digest(); - expect(members.selectedParameters.length).toBe(1); - expect(members.selectedParameters[0].label).toBe('headline:(Obama)'); - expect(members.selectedParameters[0].value).toBe('headline:(Obama)'); })); - it('can populate type facet from location', inject(($location, tags, $rootScope, desks, $q) => { - var members = null; - + it('can populate type facet from location', (done) => inject(($location, tags, $rootScope, desks, $q) => { $location.search('type=["text"]'); $rootScope.$apply(); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); tags.initSelectedFacets() - .then((currentTags) => { - members = currentTags; + .then((members) => { + expect(members.selectedFacets.type.length).toBe(1); + + done(); }); $rootScope.$digest(); - expect(members.selectedFacets.type.length).toBe(1); })); - it('can populate date facet from location', inject(($location, tags, $rootScope, desks, $q) => { - var members = null; - + it('can populate date facet from location', (done) => inject(($location, tags, $rootScope, desks, $q) => { $location.search(`language=${encodeURI('["en"]')}`); $rootScope.$apply(); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); tags.initSelectedFacets() - .then((currentTags) => { - members = currentTags; + .then((members) => { + expect(members.selectedFacets.language.length).toBe(1); + expect(members.selectedFacets.language[0].value).toBe('en'); + + done(); }); $rootScope.$digest(); - expect(members.selectedFacets.language.length).toBe(1); - expect(members.selectedFacets.language[0].value).toBe('en'); })); - it('can populate complete filters from location', inject(($location, tags, $rootScope, desks, $q) => { - var members = null; - + it('can populate complete filters from location', (done) => inject(($location, tags, $rootScope, desks, $q) => { $location.search([ 'type=["text","composite"]', 'q=slugline:(FBI) (Obama) (Australia)', @@ -114,17 +108,18 @@ describe('Tag Service', () => { spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); tags.initSelectedFacets() - .then((currentTags) => { - members = currentTags; + .then((members) => { + expect(members.selectedFacets.type.length).toBe(2); + expect(members.selectedKeywords.length).toBe(3); + expect(members.selectedParameters.length).toBe(1); + + done(); }); $rootScope.$digest(); - expect(members.selectedFacets.type.length).toBe(2); - expect(members.selectedKeywords.length).toBe(3); - expect(members.selectedParameters.length).toBe(1); })); - it('create tags for from desk and to desk', inject(($location, $rootScope, $q, tags, _desks_) => { + it('create tags for from desk and to desk', (done) => inject(($location, $rootScope, $q, tags, _desks_) => { var desks = _desks_; desks.deskLookup = { @@ -141,20 +136,19 @@ describe('Tag Service', () => { spyOn(desks, 'initialize').and.returnValue($q.when([])); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.selectedParameters.length).toEqual(2); + expect(tagsList.selectedParameters[0].label).toEqual('From Desk:National'); + expect(tagsList.selectedParameters[1].label).toEqual('To Desk:Sport'); + + done(); }); $rootScope.$digest(); - expect(tagsList.selectedParameters.length).toEqual(2); - expect(tagsList.selectedParameters[0].label).toEqual('From Desk:National'); - expect(tagsList.selectedParameters[1].label).toEqual('To Desk:Sport'); })); - it('create tags original creator', inject(($location, $rootScope, $q, tags, desks, _userList_) => { + it('create tags original creator', (done) => inject(($location, $rootScope, $q, tags, desks, _userList_) => { var userList = _userList_; $location.search('original_creator', '123'); @@ -167,19 +161,18 @@ describe('Tag Service', () => { spyOn(userList, 'getUser').and.returnValue($q.when(user)); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.selectedParameters.length).toEqual(1); + expect(tagsList.selectedParameters[0].label).toEqual('Creator:Test User'); + + done(); }); $rootScope.$digest(); - expect(tagsList.selectedParameters.length).toEqual(1); - expect(tagsList.selectedParameters[0].label).toEqual('Creator:Test User'); })); - it('create tags if creator is not known', inject(($location, $rootScope, $q, tags, desks, _userList_) => { + it('create tags if creator is not known', (done) => inject(($location, $rootScope, $q, tags, desks, _userList_) => { var userList = _userList_; $location.search('original_creator', '123'); @@ -187,36 +180,34 @@ describe('Tag Service', () => { spyOn(userList, 'getUser').and.returnValue($q.reject({})); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.selectedParameters.length).toEqual(1); + expect(tagsList.selectedParameters[0].label).toEqual('Creator:Unknown'); + + done(); }); $rootScope.$digest(); - expect(tagsList.selectedParameters.length).toEqual(1); - expect(tagsList.selectedParameters[0].label).toEqual('Creator:Unknown'); })); - it('create tags for unique name', inject(($location, $rootScope, $q, tags, desks) => { + it('create tags for unique name', (done) => inject(($location, $rootScope, $q, tags, desks) => { $location.search('unique_name', '123'); spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.selectedParameters.length).toEqual(1); + expect(tagsList.selectedParameters[0].label).toEqual('Unique Name:123'); + + done(); }); $rootScope.$digest(); - expect(tagsList.selectedParameters.length).toEqual(1); - expect(tagsList.selectedParameters[0].label).toEqual('Unique Name:123'); })); - it('create tags for ingest provider', inject(($location, $rootScope, $q, tags, desks, ingestSources) => { + it('create tags for ingest provider', (done) => inject(($location, $rootScope, $q, tags, desks, ingestSources) => { var providers = [{ name: 'Test Provider', _id: 123, @@ -226,92 +217,88 @@ describe('Tag Service', () => { spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); $location.search('ingest_provider', '123'); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.selectedParameters.length).toEqual(1); + expect(tagsList.selectedParameters[0]).toEqual( + {label: 'Provider:Test Provider', value: 'Provider:Test Provider'}, + ); + + done(); }); $rootScope.$digest(); - expect(tagsList.selectedParameters.length).toEqual(1); - expect(tagsList.selectedParameters[0]).toEqual( - {label: 'Provider:Test Provider', value: 'Provider:Test Provider'}, - ); })); - it('create tags for remove source facet', inject(($location, $rootScope, $q, tags, desks) => { + it('create tags for remove source facet', (done) => inject(($location, $rootScope, $q, tags, desks) => { spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); $location.search('notsource', '["REUTERS", "NTB"]'); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.removedFacets.notsource.length).toEqual(2); + expect(tagsList.removedFacets.notsource).toEqual([ + {label: 'Not Source', displayValue: 'REUTERS', value: 'REUTERS'}, + {label: 'Not Source', displayValue: 'NTB', value: 'NTB'}, + ]); + + done(); }); $rootScope.$digest(); - expect(tagsList.removedFacets.notsource.length).toEqual(2); - expect(tagsList.removedFacets.notsource).toEqual([ - {label: 'Not Source', displayValue: 'REUTERS', value: 'REUTERS'}, - {label: 'Not Source', displayValue: 'NTB', value: 'NTB'}, - ]); })); - it('create tags for remove desk facet', inject(($location, $rootScope, $q, tags, desks) => { + it('create tags for remove desk facet', (done) => inject(($location, $rootScope, $q, tags, desks) => { spyOn(desks, 'initialize').and.returnValue($q.when({})); $location.search('notdesk', '["123"]'); desks.deskLookup = deskList; - var tagsList = null; tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.removedFacets.notdesk.length).toEqual(1); + expect(tagsList.removedFacets.notdesk[0]).toEqual( + {label: 'Not Desk', displayValue: 'desk1', value: '123'}, + ); + + done(); }); $rootScope.$digest(); - expect(tagsList.removedFacets.notdesk.length).toEqual(1); - expect(tagsList.removedFacets.notdesk[0]).toEqual( - {label: 'Not Desk', displayValue: 'desk1', value: '123'}, - ); })); - it('create tags for remove category facet', inject(($location, $rootScope, $q, tags, desks) => { + it('create tags for remove category facet', (done) => inject(($location, $rootScope, $q, tags, desks) => { spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); $location.search('notcategory', '["International Sports", "Domestic Sports"]'); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.removedFacets.notcategory.length).toEqual(2); + expect(tagsList.removedFacets.notcategory).toEqual([ + {label: 'Not Category', displayValue: 'International Sports', value: 'International Sports'}, + {label: 'Not Category', displayValue: 'Domestic Sports', value: 'Domestic Sports'}, + ]); + + done(); }); $rootScope.$digest(); - expect(tagsList.removedFacets.notcategory.length).toEqual(2); - expect(tagsList.removedFacets.notcategory).toEqual([ - {label: 'Not Category', displayValue: 'International Sports', value: 'International Sports'}, - {label: 'Not Category', displayValue: 'Domestic Sports', value: 'Domestic Sports'}, - ]); })); - it('create tags for remove urgency facet', inject(($location, $rootScope, $q, tags, desks) => { + it('create tags for remove urgency facet', (done) => inject(($location, $rootScope, $q, tags, desks) => { spyOn(desks, 'initialize').and.returnValue($q.when({deskLookup: deskList})); $location.search('noturgency', '["1", "2"]'); - var tagsList = null; - tags.initSelectedFacets() - .then((value) => { - tagsList = value; + .then((tagsList) => { + expect(tagsList.removedFacets.noturgency.length).toEqual(2); + expect(tagsList.removedFacets.noturgency).toEqual([ + {label: 'Not Urgency', displayValue: '1', value: '1'}, + {label: 'Not Urgency', displayValue: '2', value: '2'}, + ]); + + done(); }); $rootScope.$digest(); - expect(tagsList.removedFacets.noturgency.length).toEqual(2); - expect(tagsList.removedFacets.noturgency).toEqual([ - {label: 'Not Urgency', displayValue: '1', value: '1'}, - {label: 'Not Urgency', displayValue: '2', value: '2'}, - ]); })); }); diff --git a/scripts/apps/users/import/tests/import.spec.ts b/scripts/apps/users/import/tests/import.spec.ts index fb71ed26a7..0dfaf77f2d 100644 --- a/scripts/apps/users/import/tests/import.spec.ts +++ b/scripts/apps/users/import/tests/import.spec.ts @@ -11,16 +11,18 @@ describe('user import', () => { expect(api.save).toHaveBeenCalledWith('import_profile', model); })); - it('can return an error', inject(($q, $rootScope, userImport, api) => { - var success = jasmine.createSpy('success'), - error = jasmine.createSpy('error'); + it('can return an error', (done) => inject(($q, $rootScope, userImport, api) => { + const success = jasmine.createSpy('success'); spyOn(api, 'save').and.returnValue($q.reject({status: 404, data: {_message: 'test'}})); - userImport.importUser({}).then(success, error); - $rootScope.$digest(); + userImport.importUser({}).then(success, (res) => { + expect(res).toEqual({profile_to_import: 1, message: 'test'}); + expect(success).not.toHaveBeenCalled(); + + done(); + }); - expect(success).not.toHaveBeenCalled(); - expect(error).toHaveBeenCalledWith({profile_to_import: 1, message: 'test'}); + $rootScope.$digest(); })); }); diff --git a/scripts/apps/users/tests/users.spec.ts b/scripts/apps/users/tests/users.spec.ts index 4c7f231e26..d7529995c4 100644 --- a/scripts/apps/users/tests/users.spec.ts +++ b/scripts/apps/users/tests/users.spec.ts @@ -51,15 +51,15 @@ describe('userlist service', () => { }); })); - it('can fetch users', inject((userList, $rootScope) => { - var res = null; - + it('can fetch users', (done) => inject((userList, $rootScope) => { userList.get() - .then((result) => { - res = result; + .then((res) => { + expect(res).toEqual({_items: [{_id: 1}, {_id: 2}, {_id: 3}]}); + + done(); }); + $rootScope.$digest(); - expect(res).toEqual({_items: [{_id: 1}, {_id: 2}, {_id: 3}]}); })); it('can return users from cache', inject((userList, $rootScope, api) => { @@ -74,15 +74,15 @@ describe('userlist service', () => { expect(spy).not.toHaveBeenCalled(); })); - it('can fetch single user', inject((userList, $rootScope) => { - var res = null; - + it('can fetch single user', (done) => inject((userList, $rootScope) => { userList.getUser(1) - .then((result) => { - res = result; + .then((res) => { + expect(res).toEqual({_id: 1}); + + done(); }); + $rootScope.$digest(); - expect(res).toEqual({_id: 1}); })); it('can return single user from default cacher', inject((userList, $rootScope, api) => { diff --git a/scripts/apps/workspace/content/tests/content.spec.ts b/scripts/apps/workspace/content/tests/content.spec.ts index 4882d0d3e6..9193bbbeda 100644 --- a/scripts/apps/workspace/content/tests/content.spec.ts +++ b/scripts/apps/workspace/content/tests/content.spec.ts @@ -19,107 +19,144 @@ describe('superdesk.apps.workspace.content', () => { spyOn(preferencesService, 'update').and.returnValue(true); })); - it('can create plain text items', inject((api, content, $rootScope) => { - content.createItem('text').then(done); + it('can create plain text items', (done) => inject((api, content, $rootScope) => { + content.createItem('text').then((result) => { + expect(result).toEqual(ITEM); + expect(api.save).toHaveBeenCalledWith('archive', {type: 'text', version: 0}); + + done(); + }); + $rootScope.$digest(); - expect(api.save).toHaveBeenCalledWith('archive', {type: 'text', version: 0}); - expect(done).toHaveBeenCalledWith(ITEM); })); - it('can create packages', inject((api, packages: IPackagesService, desks, session, $rootScope) => { + it('can create packages', (done) => inject((api, packages: IPackagesService, desks, session, $rootScope) => { session.identity = {_id: '1'}; desks.userDesks = {_items: []}; spyOn(desks, 'getCurrentDesk') .and .returnValue({_id: '1', name: 'sport', working_stage: '2', incoming_stage: '3'}); - packages.createEmptyPackage().then(done); + packages.createEmptyPackage().then((result) => { + expect(result).toEqual(ITEM); + + expect(api.save).toHaveBeenCalledWith( + 'archive', + { + headline: '', + slugline: '', + description_text: '', + type: 'composite', + groups: [ + { + role: 'grpRole:NEP', + refs: [{idRef: 'main', label: 'main'}], + id: 'root', + }, + { + refs: [], + id: 'main', + role: 'grpRole:main', + }, + ], + version: 0, + task: {desk: '1', stage: '2', user: '1'}, + }, + ); + + done(); + }); + $rootScope.$digest(); - expect(api.save).toHaveBeenCalledWith('archive', {headline: '', slugline: '', - description_text: '', type: 'composite', - groups: [{role: 'grpRole:NEP', refs: [{idRef: 'main', label: 'main'}], id: 'root'}, - {refs: [], id: 'main', role: 'grpRole:main'}], version: 0, - task: {desk: '1', stage: '2', user: '1'}}); - expect(done).toHaveBeenCalledWith(ITEM); })); - it('can create packages from items', inject((api, content, session, desks, $rootScope) => { + it('can create packages from items', (done) => inject((api, content, session, desks, $rootScope) => { session.identity = {_id: '1'}; spyOn(desks, 'getCurrentDesk') .and .returnValue({_id: '1', name: 'sport', working_stage: '2', incoming_stage: '3'}); - content.createPackageFromItems({data: 123}).then(done); + content.createPackageFromItems({data: 123}).then(() => { + expect(api.save).toHaveBeenCalledWith('archive', { + headline: '', slugline: '', + description_text: '', + state: 'draft', + type: 'composite', + version: 0, + task: {desk: '1', stage: '2', user: '1'}, + groups: [ + {role: 'grpRole:NEP', refs: [{idRef: 'main', label: 'main'}], id: 'root'}, + {refs: [{headline: '', residRef: undefined, location: 'archive', + slugline: '', renditions: {}, itemClass: '', type: ''}], + id: 'main', role: 'grpRole:main'}]}); + + done(); + }); + $rootScope.$digest(); - expect(api.save).toHaveBeenCalledWith('archive', { - headline: '', slugline: '', - description_text: '', - state: 'draft', - type: 'composite', - version: 0, - task: {desk: '1', stage: '2', user: '1'}, - groups: [ - {role: 'grpRole:NEP', refs: [{idRef: 'main', label: 'main'}], id: 'root'}, - {refs: [{headline: '', residRef: undefined, location: 'archive', - slugline: '', renditions: {}, itemClass: '', type: ''}], - id: 'main', role: 'grpRole:main'}]}); })); - it('can fetch content types', inject((api, content, $rootScope, $q) => { + it('can fetch content types', (done) => inject((api, content, $rootScope, $q) => { var types = [{_id: 'foo'}]; spyOn(api, 'getAll').and.returnValue($q.when(types)); - var success = jasmine.createSpy('ok'); - content.getTypes().then(success); + content.getTypes().then((result) => { + expect(result).toEqual(types); + + expect(api.getAll).toHaveBeenCalledWith('content_types', {where: {enabled: true}}, false); + + done(); + }); + $rootScope.$digest(); - expect(api.getAll).toHaveBeenCalledWith('content_types', {where: {enabled: true}}, false); - expect(success).toHaveBeenCalledWith(types); })); - it('can fetch content types and filter by desk', inject((content, $rootScope, $q) => { + it('can fetch content types and filter by desk', (done) => inject((content, $rootScope, $q) => { spyOn(content, 'getTypes').and.returnValue($q.when([ {_id: 'foo'}, {_id: 'bar'}, {_id: 'baz'}, ])); - var profiles; + content.getDeskProfiles({content_profiles: {bar: 1}}, 'baz').then((profiles) => { + expect(profiles.length).toBe(2); + expect(profiles[0]._id).toBe('bar'); + expect(profiles[1]._id).toBe('baz'); - content.getDeskProfiles({content_profiles: {bar: 1}}, 'baz').then((_profiles) => { - profiles = _profiles; + done(); }); $rootScope.$digest(); - expect(profiles.length).toBe(2); - expect(profiles[0]._id).toBe('bar'); - expect(profiles[1]._id).toBe('baz'); })); - it('can generate content types lookup dict', inject((content, $q, $rootScope) => { + it('can generate content types lookup dict', (done) => inject((content, $q, $rootScope) => { spyOn(content, 'getTypes').and.returnValue($q.when([{_id: 'foo', name: 'Foo'}, {_id: 'bar'}])); - var lookup; - content.getTypesLookup().then((_lookup) => { - lookup = _lookup; + content.getTypesLookup().then((lookup) => { + expect(lookup.foo.name).toBe('Foo'); + + done(); }); $rootScope.$digest(); - expect(lookup.foo.name).toBe('Foo'); })); - it('can get content type', inject((api, content, $rootScope, $q) => { + it('can get content type', (done) => inject((api, content, $rootScope, $q) => { var type = {_id: 'foo'}; spyOn(api, 'getAll').and.returnValue($q.when([])); spyOn(api, 'find').and.returnValue($q.when(type)); - var success = jasmine.createSpy('ok'); - content.getType('foo').then(success); + content.getType('foo').then((res) => { + expect(res).toEqual(type); + + expect(api.find).toHaveBeenCalledWith('content_types', 'foo'); + + done(); + }); $rootScope.$digest(); - expect(api.find).toHaveBeenCalledWith('content_types', 'foo'); - expect(success).toHaveBeenCalledWith(type); })); it('can filter custom fields per profile', inject((content) => { diff --git a/scripts/apps/workspace/tests/workspace.spec.ts b/scripts/apps/workspace/tests/workspace.spec.ts index 1504321550..c732fad57c 100644 --- a/scripts/apps/workspace/tests/workspace.spec.ts +++ b/scripts/apps/workspace/tests/workspace.spec.ts @@ -38,20 +38,18 @@ describe('workspace', () => { expect(ctrl.widgets[0].name).toBe('foo'); })); - it('can fetch workspaces for current user', inject((workspaces, api, session, $q, $rootScope) => { + it('can fetch workspaces for current user', (done) => inject((workspaces, api, session, $rootScope) => { spyOn(api, 'query').and.returnValue({_items: []}); session.testUser('foo'); - var items; + workspaces.queryUserWorkspaces().then((items) => { + expect(items).toEqual([]); + expect(api.query).toHaveBeenCalledWith('workspaces', {where: {user: 'foo'}}); - workspaces.queryUserWorkspaces().then((_items) => { - items = _items; + done(); }); $rootScope.$digest(); - - expect(items).toEqual([]); - expect(api.query).toHaveBeenCalledWith('workspaces', {where: {user: 'foo'}}); })); describe('active workspace', () => { diff --git a/scripts/core/activity/superdesk-service.spec.ts b/scripts/core/activity/superdesk-service.spec.ts index 67838e2a13..aa375f3e5e 100644 --- a/scripts/core/activity/superdesk-service.spec.ts +++ b/scripts/core/activity/superdesk-service.spec.ts @@ -53,55 +53,47 @@ describe('Superdesk service', () => { expect(superdesk.activities.testActivity.label).toBe(testActivity.label); })); - it('can run activities', inject(($rootScope, superdesk, activityService) => { - var result = null; - + it('can run activities', (done) => inject(($rootScope, superdesk, activityService) => { activityService.start(superdesk.activities.testActivity) - .then((res) => { - result = res; + .then((result) => { + expect(result).toBe('test'); + + done(); }); $rootScope.$digest(); - - expect(result).toBe('test'); })); - it('can run activities by intent', inject(($rootScope, superdesk) => { - var successResult = null; - var failureResult = null; - + it('can run activities by intent', (done) => inject(($rootScope, superdesk) => { superdesk.intent('testAction', 'testType', 'testData') - .then((result) => { - successResult = result; - }); - superdesk.intent('testAction2', 'testType2', 'testData2') - .then(null, (result) => { - failureResult = result; + .then((successResult) => { + expect(successResult).toBe('test'); + + superdesk.intent('testAction2', 'testType2', 'testData2') + .then(null, (failureResult) => { + expect(failureResult).toBe(undefined); + + done(); + }); }); $rootScope.$digest(); - - expect(successResult).toBe('test'); - expect(failureResult).toBe(undefined); })); - it('can run activities by intent provided with an id', inject(($rootScope, superdesk) => { - var successResult = null; - var failureResult = null; - + it('can run activities by intent provided with an id', (done) => inject(($rootScope, superdesk) => { superdesk.intent('testAction', 'testType', 'testData', 'testId') - .then((result) => { - successResult = result; - }); - superdesk.intent('testAction2', 'testType2', 'testData2', 'testId2') - .then(null, (result) => { - failureResult = result; + .then((successResult) => { + expect(successResult).toBe('test'); + + superdesk.intent('testAction2', 'testType2', 'testData2', 'testId2') + .then(null, (failureResult) => { + expect(failureResult).toBe(undefined); + + done(); + }); }); $rootScope.$digest(); - - expect(successResult).toBe('test'); - expect(failureResult).toBe(undefined); })); it('can find activities', inject((superdesk) => { diff --git a/scripts/core/api/api-service.spec.ts b/scripts/core/api/api-service.spec.ts index 57329f7562..3fbb48f5f8 100644 --- a/scripts/core/api/api-service.spec.ts +++ b/scripts/core/api/api-service.spec.ts @@ -79,7 +79,7 @@ describe('API Provider', () => { $httpBackend.verifyNoOutstandingRequest(); })); - it('can query', inject((api, urls, $q, $httpBackend, $http) => { + it('can query', (done) => inject((api, urls, $q, $httpBackend, $http) => { var headers = $http.defaults.headers.common; headers['X-Filter'] = 'User.*'; @@ -88,53 +88,46 @@ describe('API Provider', () => { $httpBackend.expectGET(USERS_URL, headers).respond(collection([{}])); - var users; + api.http.query().then((users) => { + expect(users._items.length).toBe(1); + expect(urls.resource).toHaveBeenCalledWith('users'); - api.http.query().then((_users) => { - users = _users; + done(); }); $httpBackend.flush(); - - expect(users._items.length).toBe(1); - expect(urls.resource).toHaveBeenCalledWith('users'); })); - it('rejects on query error', inject((api, urls, $q, $httpBackend) => { + it('rejects on query error', (done) => inject((api, urls, $q, $httpBackend) => { $httpBackend.expectGET(USERS_URL).respond(400); spyOn(urls, 'resource').and.returnValue($q.when(USERS_URL)); - var reject; - - api.http.query().then(null, (reason) => { - reject = true; + api.http.query().then(null, () => { + done(); }); $httpBackend.flush(); - - expect(reject).toBe(true); })); - it('can create new resource', inject((api, urls, $q, $httpBackend) => { - var userData = {username: 'test'}, - user; + it('can create new resource', (done) => inject((api, urls, $q, $httpBackend) => { + var userData = {username: 'test'}; spyOn(urls, 'resource').and.returnValue($q.when(USERS_URL)); $httpBackend.expectPOST(USERS_URL, userData).respond(201, {_links: {self: {href: 'user_href'}}}); - api.http.save({username: 'test'}).then((_user) => { - user = _user; + api.http.save({username: 'test'}).then((user) => { + expect(user._links.self.href).toBe('user_href'); + expect(urls.resource).toHaveBeenCalledWith('users'); + + done(); }); $httpBackend.flush(); - - expect(user._links.self.href).toBe('user_href'); - expect(urls.resource).toHaveBeenCalledWith('users'); })); - it('can fail creating new resource', inject((api, urls, $q, $httpBackend) => { + it('can fail creating new resource', (done) => inject((api, urls, $q, $httpBackend) => { var userData = {username: 'test'}; spyOn(urls, 'resource').and.returnValue($q.when(USERS_URL)); @@ -144,17 +137,14 @@ describe('API Provider', () => { _issues: {first_name: {required: 1}}, }); - var test = null; + const onSuccess = jasmine.createSpy('onSuccess'); - api.http.save({username: 'test'}).then((response) => { - test = true; - }, (response) => { - test = false; + api.http.save({username: 'test'}).then(onSuccess, (response) => { + expect(onSuccess).not.toHaveBeenCalled(); + done(); }); $httpBackend.flush(); - - expect(test).toBe(false); })); it('can create new with diff', inject((api, urls, $q, $httpBackend) => { @@ -173,8 +163,7 @@ describe('API Provider', () => { expect(urls.resource).toHaveBeenCalledWith('users'); })); - it('can update endpoint', inject((api, $httpBackend) => { - var user; + it('can update endpoint', (done) => inject((api, $httpBackend) => { var userData = { _links: {self: {href: USER_PATH}}, _id: 2, @@ -184,14 +173,14 @@ describe('API Provider', () => { $httpBackend.expectPATCH(USER_URL, {username: 'test', Avatar: {href: 'test'}}).respond(200); - api.http.save(userData).then((_user) => { - user = _user; + api.http.save(userData).then((user) => { + expect(user.username).toBe('test'); + expect(user._links.self.href).toBe(USER_PATH); + + done(); }); $httpBackend.flush(); - - expect(user.username).toBe('test'); - expect(user._links.self.href).toBe(USER_PATH); })); it('can update with diff', inject((api, $httpBackend) => { @@ -205,76 +194,70 @@ describe('API Provider', () => { $httpBackend.flush(); })); - it('can delete', inject((api, $httpBackend) => { - var user = {_links: {self: {href: USER_PATH}}}, - then = jasmine.createSpy('then'); + it('can delete', (done) => inject((api, $httpBackend) => { + var user = {_links: {self: {href: USER_PATH}}}; $httpBackend.expectDELETE(USER_URL).respond(204); - api.http.remove(user).then(then); + api.http.remove(user).then(() => { + done(); + }); $httpBackend.flush(); - - expect(then).toHaveBeenCalled(); })); - it('handles delete on deleted resource as success', inject((api, $httpBackend) => { - var user = {_links: {self: {href: USER_PATH}}}, - then = jasmine.createSpy('then'); + it('handles delete on deleted resource as success', (done) => inject((api, $httpBackend) => { + var user = {_links: {self: {href: USER_PATH}}}; $httpBackend.expectDELETE(USER_URL).respond(404); - api.http.remove(user).then(then); + api.http.remove(user).then(() => { + done(); + }); $httpBackend.flush(); - - expect(then).toHaveBeenCalled(); })); - it('rejects other delete errors as errors', inject((api, $httpBackend) => { + it('rejects other delete errors as errors', (done) => inject((api, $httpBackend) => { var user = {_links: {self: {href: USER_PATH}}}, - success = jasmine.createSpy('success'), - error = jasmine.createSpy('error'); + success = jasmine.createSpy('success'); $httpBackend.expectDELETE(USER_URL).respond(405); - api.http.remove(user).then(success, error); + api.http.remove(user).then(success, () => { + expect(success).not.toHaveBeenCalled(); - $httpBackend.flush(); + done(); + }); - expect(success).not.toHaveBeenCalled(); - expect(error).toHaveBeenCalled(); + $httpBackend.flush(); })); - it('can get item by url', inject((api, $httpBackend) => { - var user; - + it('can get item by url', (done) => inject((api, $httpBackend) => { $httpBackend.expectGET(USER_URL).respond({username: 'foo'}); - api.http.getByUrl(USER_PATH).then((_user) => { - user = _user; + api.http.getByUrl(USER_PATH).then((user) => { + expect(user.username).toBe('foo'); + + done(); }); $httpBackend.flush(); - - expect(user.username).toBe('foo'); })); - it('can get item by id', inject((api, urls, $q, $httpBackend) => { - var user; - + it('can get item by id', (done) => inject((api, urls, $q, $httpBackend) => { spyOn(urls, 'resource').and.returnValue($q.when(SERVER_URL + '/users')); $httpBackend.expectGET(SERVER_URL + '/users/1').respond({username: 'foo'}); - api.http.getById(1).then((_user) => { - user = _user; + api.http.getById(1).then((user) => { + expect(user.username).toBe('foo'); + expect(urls.resource).toHaveBeenCalledWith('users'); + + done(); }); $httpBackend.flush(); - - expect(user.username).toBe('foo'); - expect(urls.resource).toHaveBeenCalledWith('users'); })); it('can replace resource on given dest', inject((api, $httpBackend) => { @@ -287,33 +270,30 @@ describe('API Provider', () => { $httpBackend.flush(); })); - it('rejects non success responses', inject((api, $httpBackend) => { + it('rejects non success responses', (done) => inject((api, $httpBackend) => { $httpBackend.expectGET(USER_URL).respond(400); - var success = jasmine.createSpy('success'), - error = jasmine.createSpy('error'); + var success = jasmine.createSpy('success'); - api.http.getByUrl(USER_PATH).then(success, error); + api.http.getByUrl(USER_PATH).then(success, () => { + expect(success).not.toHaveBeenCalled(); + done(); + }); $httpBackend.flush(); - - expect(success).not.toHaveBeenCalled(); - expect(error).toHaveBeenCalled(); })); - it('can get resource url', inject((api, urls, $q, $rootScope) => { - var url; - + it('can get resource url', (done) => inject((api, urls, $q, $rootScope) => { spyOn(urls, 'resource').and.returnValue($q.when(USERS_URL)); - api.http.getUrl().then((_url) => { - url = _url; + api.http.getUrl().then((url) => { + expect(url).toBe(USERS_URL); + expect(urls.resource).toHaveBeenCalledWith('users'); + + done(); }); $rootScope.$digest(); - - expect(url).toBe(USERS_URL); - expect(urls.resource).toHaveBeenCalledWith('users'); })); it('can get resource headers', inject((api) => { @@ -367,19 +347,17 @@ describe('API Provider', () => { $httpBackend.verifyNoOutstandingExpectation(); })); - it('can query resource', inject((api, $httpBackend) => { + it('can query resource', (done) => inject((api, $httpBackend) => { $httpBackend.expectGET(USERS_URL + '?limit=1').respond(200, {_items: []}); - var users; - api('users').query({limit: 1}) - .then((_users) => { - users = _users; + .then((users) => { + expect(users._items.length).toBe(0); + + done(); }); $httpBackend.flush(); - - expect(users._items.length).toBe(0); })); it('can query subresource', inject((api, $httpBackend) => { @@ -392,35 +370,35 @@ describe('API Provider', () => { $httpBackend.flush(); })); - it('rejects on status error', inject((api, $httpBackend) => { + it('rejects on status error', (done) => inject((api, $httpBackend) => { $httpBackend.expectGET(USERS_URL).respond(400); - var success = jasmine.createSpy('success'), - error = jasmine.createSpy('error'); + var success = jasmine.createSpy('success'); api('users').query() - .then(success, error); + .then(success, () => { + expect(success).not.toHaveBeenCalled(); - $httpBackend.flush(); + done(); + }); - expect(success).not.toHaveBeenCalled(); - expect(error).toHaveBeenCalled(); + $httpBackend.flush(); })); - it('rejects on data error', inject((api, $httpBackend) => { + it('rejects on data error', (done) => inject((api, $httpBackend) => { $httpBackend.expectPOST(USERS_URL).respond(200, {_status: 'ERR'}); - var success = jasmine.createSpy('success'), - error = jasmine.createSpy('error'); + var success = jasmine.createSpy('success'); api('users') .save({}) - .then(success, error); + .then(success, () => { + expect(success).not.toHaveBeenCalled(); - $httpBackend.flush(); + done(); + }); - expect(success).not.toHaveBeenCalled(); - expect(error).toHaveBeenCalled(); + $httpBackend.flush(); })); it('cleans data before saving it', inject((api, $httpBackend) => { @@ -429,16 +407,17 @@ describe('API Provider', () => { $httpBackend.flush(); })); - it('can fetch an item by id', inject((api, $httpBackend) => { - var data = {_id: 1}, user; + it('can fetch an item by id', (done) => inject((api, $httpBackend) => { + var data = {_id: 1}; $httpBackend.expectGET(USER_URL).respond(200, data); api('users').getById(1) - .then((_user) => { - user = _user; + .then((user) => { + expect(user._id).toBe(1); + + done(); }); $httpBackend.flush(); - expect(user._id).toBe(1); })); it('can remove an item', inject((api, $httpBackend) => { diff --git a/scripts/core/api/request-service.spec.ts b/scripts/core/api/request-service.spec.ts index 17bb06e0b3..833ad695a3 100644 --- a/scripts/core/api/request-service.spec.ts +++ b/scripts/core/api/request-service.spec.ts @@ -10,20 +10,18 @@ describe('request service', () => { })); beforeEach(window.module('superdesk.core.upload')); - it('can resend $http request', inject((request, $httpBackend) => { + it('can resend $http request', (done) => inject((request, $httpBackend) => { var config = {url: 'test', method: 'GET'}; $httpBackend.expectGET('test').respond('data'); - var response; + request.resend(config).then((response) => { + expect(response.status).toBe(200); - request.resend(config).then((_response) => { - response = _response; + done(); }); $httpBackend.flush(); - - expect(response.status).toBe(200); })); it('can resend upload request', inject((request, upload) => { diff --git a/scripts/core/api/url-resolver.spec.ts b/scripts/core/api/url-resolver.spec.ts index 3fd6bc4b27..d9d28ef446 100644 --- a/scripts/core/api/url-resolver.spec.ts +++ b/scripts/core/api/url-resolver.spec.ts @@ -14,19 +14,17 @@ describe('url resolver', () => { Object.assign(appConfig, testConfig); }); - it('can resolve resource urls', inject((urls, $httpBackend, $rootScope) => { + it('can resolve resource urls', (done) => inject((urls, $httpBackend, $rootScope) => { $httpBackend.expectGET(SERVER_URL).respond(RESOURCES); - var url; + urls.resource('users').then((url) => { + expect(url).toBe(SERVER_URL + USERS_URL); - urls.resource('users').then((_url) => { - url = _url; + done(); }); $httpBackend.flush(); $rootScope.$digest(); - - expect(url).toBe(SERVER_URL + USERS_URL); })); it('can resolve item urls', inject((urls) => { diff --git a/scripts/core/auth/auth-interceptor.spec.ts b/scripts/core/auth/auth-interceptor.spec.ts index aa50ea8239..7fc0a78c1e 100644 --- a/scripts/core/auth/auth-interceptor.spec.ts +++ b/scripts/core/auth/auth-interceptor.spec.ts @@ -31,26 +31,26 @@ describe('auth interceptor', () => { })); it('should intercept 401 response and reject the request if payload has credentials 1', - inject(($injector, $q, $rootScope, session, request, AuthExpiredInterceptor) => { + (done) => inject(($q, $rootScope, session, request, AuthExpiredInterceptor) => { var interceptor = AuthExpiredInterceptor, config = {method: 'POST', url: 'http://localhost:5000/auth', headers: {}}, response = {status: 401, config: config, data: {_issues: {credentials: 1}}}; + const onSuccess = jasmine.createSpy('onSuccess'); + spyOn(session, 'expire'); spyOn(session, 'getIdentity').and.returnValue($q.when()); spyOn(request, 'resend'); - var result; + interceptor.responseError(response).then(onSuccess, (result) => { + expect(result.data._issues.credentials).toBe(1); + expect(session.expire).not.toHaveBeenCalled(); + expect(request.resend).not.toHaveBeenCalled(); + expect(onSuccess).not.toHaveBeenCalled(); - interceptor.responseError(response).then((success) => { - result = success; - }, (rejection) => { - result = rejection; + done(); }); $rootScope.$digest(); - expect(result.data._issues.credentials).toBe(1); - expect(session.expire).not.toHaveBeenCalled(); - expect(request.resend).not.toHaveBeenCalled(); })); }); diff --git a/scripts/core/auth/auth-service.spec.ts b/scripts/core/auth/auth-service.spec.ts index 7fa37a1fbb..aaff74c018 100644 --- a/scripts/core/auth/auth-service.spec.ts +++ b/scripts/core/auth/auth-service.spec.ts @@ -29,41 +29,38 @@ describe('auth service', () => { spyOn(api.users, 'getById').and.returnValue($q.when({username: 'foo'})); })); - it('can login', inject((auth, session, $httpBackend, $rootScope) => { - const success = jasmine.createSpy('authenticated'); - + it('can login', (done) => inject((auth, session, $httpBackend, $rootScope) => { $httpBackend.expectPOST('http://localhost:5000/api/auth').respond(200, {user: 'foo', token: 'bar'}); expect(session.identity).toBe(null); expect(session.token).toBe(null); - auth.login('admin', 'admin').then(success); + auth.login('admin', 'admin').then(() => { + expect(session.start).toHaveBeenCalled(); + + done(); + }); $rootScope.$apply(); $httpBackend.flush(); $rootScope.$apply(); - expect(session.start).toHaveBeenCalled(); - expect(success).toHaveBeenCalled(); $httpBackend.verifyNoOutstandingExpectation(); })); - it('checks credentials', inject((auth, $httpBackend, $rootScope) => { - var resolved = false, rejected = false; + it('checks credentials', (done) => inject((auth, $httpBackend, $rootScope) => { + const onSuccess = jasmine.createSpy('onSuccess'); $httpBackend.expectPOST('http://localhost:5000/api/auth').respond(403, {}); - auth.login('wrong', 'credentials').then(() => { - resolved = true; - }, () => { - rejected = true; + auth.login('wrong', 'credentials').then(onSuccess, () => { + expect(onSuccess).not.toHaveBeenCalled(); + + done(); }); $httpBackend.flush(); $rootScope.$apply(); - - expect(resolved).toBe(false); - expect(rejected).toBe(true); })); it('handles oauth login', inject((auth, session, $http, $rootScope) => { diff --git a/scripts/core/auth/basic-auth-adapter.spec.ts b/scripts/core/auth/basic-auth-adapter.spec.ts index 5c3fb43958..f3eec8fc84 100644 --- a/scripts/core/auth/basic-auth-adapter.spec.ts +++ b/scripts/core/auth/basic-auth-adapter.spec.ts @@ -34,42 +34,38 @@ describe('basic auth adapter', () => { $httpBackend.verifyNoOutstandingRequest(); }); - it('can login', inject((authAdapter, urls, $q) => { + it('can login', (done) => inject((authAdapter, urls, $q) => { $httpBackend .expectPOST(LOGIN_URL, {username: username, password: password}) .respond({token: session, user: '1'}); spyOn(urls, 'resource').and.returnValue($q.when(LOGIN_URL)); - var identity; + authAdapter.authenticate(username, password).then((identity) => { + expect(urls.resource).toHaveBeenCalledWith('auth_db'); + expect(identity.token).toBe('Basic ' + btoa(session + ':')); - authAdapter.authenticate(username, password).then((_identity) => { - identity = _identity; + done(); }); $httpBackend.flush(); - - expect(urls.resource).toHaveBeenCalledWith('auth_db'); - expect(identity.token).toBe('Basic ' + btoa(session + ':')); })); - it('can reject on failed auth', inject((authAdapter, urls, $q) => { - var resolved = false, rejected = false; + it('can reject on failed auth', (done) => inject((authAdapter, urls, $q) => { + const onSuccess = jasmine.createSpy('onSuccess'); + spyOn(urls, 'resource').and.returnValue($q.when(LOGIN_URL)); $httpBackend.expectPOST(LOGIN_URL).respond(400); authAdapter.authenticate(username, password) - .then(() => { - resolved = true; - }, () => { - rejected = true; + .then(onSuccess, () => { + expect(onSuccess).not.toHaveBeenCalled(); + + done(); }); $httpBackend.flush(); - - expect(resolved).toBe(false); - expect(rejected).toBe(true); })); }); diff --git a/scripts/core/auth/session-service.spec.ts b/scripts/core/auth/session-service.spec.ts index 1a236039b6..b8b5518749 100644 --- a/scripts/core/auth/session-service.spec.ts +++ b/scripts/core/auth/session-service.spec.ts @@ -33,21 +33,19 @@ describe('session service', () => { expect($rootScope.$broadcast).toHaveBeenCalledWith('logout'); })); - it('can resolve identity on start', inject((session, $rootScope) => { - var identity; - - session.getIdentity().then((_identity) => { - identity = _identity; - }); - - session.getIdentity().then((i2) => { - expect(identity).toBe(i2); + it('can resolve identity on start', (done) => inject((session, $rootScope) => { + session.getIdentity().then((identity) => { + session.getIdentity().then((i2) => { + expect(identity.name).toBe('foo'); + expect(identity).toBe(i2); + + done(); + }); }); session.start(SESSION, {name: 'foo'}); $rootScope.$apply(); - expect(identity.name).toBe('foo'); })); it('can store state for future requests', inject((session, $rootScope) => { @@ -111,19 +109,18 @@ describe('session service', () => { expect(nextSession.identity.name).toBe('baz'); })); - it('can return identity after session start', inject((session, $rootScope) => { + it('can return identity after session start', (done) => inject((session, $rootScope) => { session.start(SESSION, {name: 'bar'}); $rootScope.$digest(); - var success = jasmine.createSpy('success'); - - session.getIdentity().then(success); + session.getIdentity().then(() => { + done(); + }); $rootScope.$digest(); - expect(success).toHaveBeenCalled(); })); - it('should not resolve identity after expiry', inject((session, $rootScope) => { + it('should not resolve identity after expiry', (done) => inject((session, $rootScope) => { session.start(SESSION, {name: 'bar'}); $rootScope.$digest(); @@ -134,7 +131,12 @@ describe('session service', () => { session.getIdentity().then(success); + setTimeout(() => { + expect(success).not.toHaveBeenCalled(); + + done(); + }, 2000); + $rootScope.$digest(); - expect(success).not.toHaveBeenCalled(); })); }); diff --git a/scripts/core/beta/beta.spec.ts b/scripts/core/beta/beta.spec.ts index 8d80e4c18d..2151f5c070 100644 --- a/scripts/core/beta/beta.spec.ts +++ b/scripts/core/beta/beta.spec.ts @@ -2,7 +2,7 @@ describe('beta service', () => { beforeEach(window.module('superdesk.core.services.beta')); it('can filter out sd-beta from html when beta is off', - inject((betaService, $rootScope, $http, $httpBackend) => { + (done) => inject((betaService, $rootScope, $http, $httpBackend) => { $rootScope.beta = false; var isBeta = null; @@ -13,43 +13,56 @@ describe('beta service', () => { $rootScope.$digest(); expect(isBeta).toBe(false); - var template = '