mirror of
https://github.com/opf/openproject.git
synced 2026-06-13 19:20:00 +00:00
10e21154f7
* ove reporting and reporting_engine js to frontend page * Replace webhook assets javascript * Add path augment service to dynamically load scripts * Remove JS-Files that are not used/not needed any more * Include AugmentingModule correctly * Remove special handling for checkbox selection which is outdated and two jquery libs that are not used any more * Load scripts dynamically that are not needed globally * Move plugin JS to frontend * Move toggable fieldsets to global listeners * Move top-menu to global listeners and convert to TS * Move action_menu to frontend and port to TS * Move settings listener to frontend * Remove global js assets that were not used anyway * Move date range to timelog dynamic script where it's still used until removed * Move colors to global-listeners and port to TS * Replace tooltip with simple form instructions on the one place used Tooltips were only used at the one place in our application, when changing a users password. We can simply remove it there and use a modern solution the next time we need a tooltip * Move danger zone validation to frontend and port to TS * Move colorcontrast to backlogs vendor where it's used now * Remove contents of application.js.erb * Move project and user scripts to dynamically loaded * Move onboarding tour to dynamically loaded * Use correct syntax for jQuery so that $ is known keyword within this function * Fix onboarding tour * Fix onboarding tour for scrum tour * Fix specs after moving JS * Remove application.js.erb * Move locales and ckeditor to the frontend to dynamically load * Remove bundles caches These are no longer being used since angular cli * Ensure locales are exported before angular Co-authored-by: Henriette Darge <h.darge@openproject.com>
145 lines
5.8 KiB
TypeScript
145 lines
5.8 KiB
TypeScript
// -- copyright
|
|
// OpenProject is an open source project management software.
|
|
// Copyright (C) 2012-2020 the OpenProject GmbH
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License version 3.
|
|
//
|
|
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
|
// Copyright (C) 2006-2013 Jean-Philippe Lang
|
|
// Copyright (C) 2010-2013 the ChiliProject Team
|
|
//
|
|
// This program is free software; you can redistribute it and/or
|
|
// modify it under the terms of the GNU General Public License
|
|
// as published by the Free Software Foundation; either version 2
|
|
// of the License, or (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
//
|
|
// See docs/COPYRIGHT.rdoc for more details.
|
|
// ++
|
|
|
|
import {Injector} from '@angular/core';
|
|
import {TestBed} from '@angular/core/testing';
|
|
import {I18nService} from 'core-app/modules/common/i18n/i18n.service';
|
|
import {NotificationsService} from 'core-app/modules/common/notifications/notifications.service';
|
|
import {PathHelperService} from 'core-app/modules/common/path-helper/path-helper.service';
|
|
import {OpenprojectHalModule} from 'core-app/modules/hal/openproject-hal.module';
|
|
import {WorkPackageResource} from 'core-app/modules/hal/resources/work-package-resource';
|
|
import {HalResourceService} from 'core-app/modules/hal/services/hal-resource.service';
|
|
import {OpenProjectFileUploadService} from 'core-components/api/op-file-upload/op-file-upload.service';
|
|
import {SchemaCacheService} from 'core-components/schemas/schema-cache.service';
|
|
import {States} from 'core-components/states.service';
|
|
import {WorkPackageCacheService} from 'core-components/work-packages/work-package-cache.service';
|
|
import {HalResourceNotificationService} from "core-app/modules/hal/services/hal-resource-notification.service";
|
|
import {take, takeWhile} from 'rxjs/operators';
|
|
import {WorkPackageCreateService} from '../wp-new/wp-create.service';
|
|
import {WorkPackageDmService} from "core-app/modules/hal/dm-services/work-package-dm.service";
|
|
import {WorkPackagesActivityService} from "core-components/wp-single-view-tabs/activity-panel/wp-activity.service";
|
|
import {TimezoneService} from "core-components/datetime/timezone.service";
|
|
import {ConfigurationService} from "core-app/modules/common/config/configuration.service";
|
|
import {WorkPackageNotificationService} from "core-app/modules/work_packages/notifications/work-package-notification.service";
|
|
|
|
describe('WorkPackageCacheService', () => {
|
|
let injector:Injector;
|
|
let wpCacheService:WorkPackageCacheService;
|
|
let workPackageDmService:WorkPackageDmService;
|
|
let schemaCacheService:SchemaCacheService;
|
|
let dummyWorkPackages:WorkPackageResource[] = [];
|
|
|
|
beforeEach(() => {
|
|
TestBed.configureTestingModule({
|
|
imports: [
|
|
OpenprojectHalModule,
|
|
],
|
|
providers: [
|
|
States,
|
|
HalResourceService,
|
|
TimezoneService,
|
|
WorkPackagesActivityService,
|
|
WorkPackageCacheService,
|
|
SchemaCacheService,
|
|
WorkPackageDmService,
|
|
{provide: ConfigurationService, useValue: {}},
|
|
{provide: PathHelperService, useValue: {}},
|
|
{provide: I18nService, useValue: {t: (...args:any[]) => 'translation'}},
|
|
{provide: WorkPackageResource, useValue: {}},
|
|
{provide: WorkPackageCreateService, useValue: {}},
|
|
{provide: NotificationsService, useValue: {}},
|
|
{provide: HalResourceNotificationService, useValue: {handleRawError: () => false}},
|
|
{provide: WorkPackageNotificationService, useValue: {}},
|
|
{provide: OpenProjectFileUploadService, useValue: {}}
|
|
]
|
|
});
|
|
|
|
injector = TestBed.get(Injector);
|
|
wpCacheService = TestBed.get(WorkPackageCacheService);
|
|
schemaCacheService = TestBed.get(SchemaCacheService);
|
|
workPackageDmService = TestBed.get(WorkPackageDmService);
|
|
|
|
// sinon.stub(WorkPackageDmService, 'loadWorkPackageById').returns(Promise.resolve(true));
|
|
spyOn(workPackageDmService, 'loadWorkPackageById').and.returnValue(Promise.resolve(true as any));
|
|
|
|
// sinon.stub(schemaCacheService, 'ensureLoaded').returns(Promise.resolve(true));
|
|
spyOn(schemaCacheService, 'ensureLoaded').and.returnValue(Promise.resolve(true as any));
|
|
|
|
|
|
const workPackage1 = new WorkPackageResource(
|
|
injector,
|
|
{
|
|
id: '1',
|
|
_links: {
|
|
self: ''
|
|
}
|
|
},
|
|
true,
|
|
(wp:WorkPackageResource) => undefined,
|
|
'WorkPackage'
|
|
);
|
|
|
|
dummyWorkPackages = [workPackage1 as any];
|
|
});
|
|
|
|
it('returns a work package after the list has been initialized', function (done:any) {
|
|
wpCacheService.loadWorkPackage('1').values$()
|
|
.pipe(
|
|
take(1)
|
|
)
|
|
.subscribe((wp:WorkPackageResource) => {
|
|
expect(wp.id!).toEqual('1');
|
|
done();
|
|
});
|
|
|
|
wpCacheService.updateWorkPackageList(dummyWorkPackages);
|
|
});
|
|
|
|
it('should return/stream a work package every time it gets updated', (done:any) => {
|
|
let count = 0;
|
|
|
|
wpCacheService.loadWorkPackage('1').values$()
|
|
.pipe(
|
|
takeWhile((wp) => count < 2)
|
|
)
|
|
.subscribe((wp:WorkPackageResource) => {
|
|
expect(wp.id!).toEqual('1');
|
|
|
|
count += 1;
|
|
if (count === 2) {
|
|
done();
|
|
}
|
|
});
|
|
|
|
wpCacheService.updateWorkPackageList([dummyWorkPackages[0]], false);
|
|
wpCacheService.updateWorkPackageList([dummyWorkPackages[0]], false);
|
|
wpCacheService.updateWorkPackageList([dummyWorkPackages[0]], false);
|
|
});
|
|
|
|
});
|