Skip to content

Commit 9fbd281

Browse files
committed
fix tests
1 parent 26b856f commit 9fbd281

File tree

3 files changed

+55
-196
lines changed

3 files changed

+55
-196
lines changed

web-app/admin/src/app/admin/admin-event/admin-event-form/form-details/form-details.component.spec.ts

Lines changed: 45 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { FormDetailsComponent } from './form-details.component';
33
import { EventsService } from '../../events.service';
44
import { MatDialog } from '@angular/material/dialog';
55
import { MatSnackBar } from '@angular/material/snack-bar';
6-
import { LocalStorageService } from '../../../../upgrade/ajs-upgraded-providers';
6+
import { LocalStorageService, UserService } from '../../../../upgrade/ajs-upgraded-providers';
7+
import { StateService } from '@uirouter/angular';
78
import { of, throwError } from 'rxjs';
89
import { Event as MageEvent } from 'src/app/filter/filter.types';
910

@@ -14,8 +15,8 @@ describe('FormDetailsComponent', () => {
1415
let mockDialog: jasmine.SpyObj<MatDialog>;
1516
let mockSnackBar: jasmine.SpyObj<MatSnackBar>;
1617
let mockLocalStorageService: any;
17-
let mockStateParams: any;
18-
let mockState: any;
18+
let mockUserService: any;
19+
let mockStateService: any;
1920

2021
const mockEvent: MageEvent = {
2122
id: 1,
@@ -50,11 +51,16 @@ describe('FormDetailsComponent', () => {
5051
mockLocalStorageService = {
5152
getToken: jasmine.createSpy('getToken').and.returnValue('test-token')
5253
};
53-
mockStateParams = {
54-
eventId: '1',
55-
formId: null
54+
mockUserService = {
55+
myself: jasmine.createSpy('myself')
56+
};
57+
mockStateService = {
58+
params: {
59+
eventId: '1',
60+
formId: null
61+
},
62+
go: jasmine.createSpy('go')
5663
};
57-
mockState = jasmine.createSpyObj('$state', ['go']);
5864

5965
await TestBed.configureTestingModule({
6066
declarations: [FormDetailsComponent],
@@ -63,8 +69,8 @@ describe('FormDetailsComponent', () => {
6369
{ provide: MatDialog, useValue: mockDialog },
6470
{ provide: MatSnackBar, useValue: mockSnackBar },
6571
{ provide: LocalStorageService, useValue: mockLocalStorageService },
66-
{ provide: '$stateParams', useValue: mockStateParams },
67-
{ provide: '$state', useValue: mockState }
72+
{ provide: UserService, useValue: mockUserService },
73+
{ provide: StateService, useValue: mockStateService }
6874
]
6975
})
7076
.compileComponents();
@@ -78,9 +84,14 @@ describe('FormDetailsComponent', () => {
7884
});
7985

8086
describe('ngOnInit', () => {
87+
beforeEach(() => {
88+
spyOn<any>(component, 'generateSampleObservations');
89+
spyOn<any>(component, 'fetchFormIcons');
90+
});
91+
8192
it('should load event and setup breadcrumbs for new form', () => {
8293
mockEventsService.getEventById.and.returnValue(of(mockEvent));
83-
mockStateParams.formId = null;
94+
mockStateService.params.formId = null;
8495

8596
component.ngOnInit();
8697

@@ -98,7 +109,7 @@ describe('FormDetailsComponent', () => {
98109

99110
it('should load event and existing form for edit', () => {
100111
mockEventsService.getEventById.and.returnValue(of(mockEvent));
101-
mockStateParams.formId = '1';
112+
mockStateService.params.formId = '1';
102113

103114
component.ngOnInit();
104115

@@ -122,7 +133,7 @@ describe('FormDetailsComponent', () => {
122133
it('should handle missing formId in event forms', () => {
123134
const eventWithoutForm = { ...mockEvent, forms: [] };
124135
mockEventsService.getEventById.and.returnValue(of(eventWithoutForm));
125-
mockStateParams.formId = '999';
136+
mockStateService.params.formId = '999';
126137

127138
component.ngOnInit();
128139

@@ -329,7 +340,7 @@ describe('FormDetailsComponent', () => {
329340

330341
component.navigateToFields();
331342

332-
expect(mockState.go).toHaveBeenCalledWith('admin.formFieldsEdit', { eventId: 1, formId: 1 });
343+
expect(mockStateService.go).toHaveBeenCalledWith('admin.formFieldsEdit', { eventId: 1, formId: 1 });
333344
});
334345
});
335346

@@ -340,7 +351,7 @@ describe('FormDetailsComponent', () => {
340351

341352
component.navigateToMap();
342353

343-
expect(mockState.go).toHaveBeenCalledWith('admin.formMapEdit', { eventId: 1, formId: 1 });
354+
expect(mockStateService.go).toHaveBeenCalledWith('admin.formMapEdit', { eventId: 1, formId: 1 });
344355
});
345356
});
346357

@@ -351,31 +362,44 @@ describe('FormDetailsComponent', () => {
351362

352363
component.navigateToFeed();
353364

354-
expect(mockState.go).toHaveBeenCalledWith('admin.formFeedEdit', { eventId: 1, formId: 1 });
365+
expect(mockStateService.go).toHaveBeenCalledWith('admin.formFeedEdit', { eventId: 1, formId: 1 });
355366
});
356367
});
357368

358369
describe('exportForm', () => {
370+
let mockAnchor: any;
371+
359372
beforeEach(() => {
360373
component.event = mockEvent;
361374
component.form = { id: 1, name: 'Test Form' };
362375
component.token = 'test-token';
376+
377+
mockAnchor = {
378+
href: '',
379+
download: '',
380+
style: { display: '' },
381+
click: jasmine.createSpy('click')
382+
};
383+
spyOn(document, 'createElement').and.returnValue(mockAnchor);
384+
spyOn(document.body, 'appendChild');
385+
spyOn(document.body, 'removeChild');
363386
});
364387

365388
it('should trigger download for form export', () => {
366-
spyOn(document, 'createElement').and.callThrough();
367-
spyOn(document.body, 'appendChild').and.callThrough();
368-
spyOn(document.body, 'removeChild').and.callThrough();
369-
370389
component.exportForm();
371390

372391
expect(mockSnackBar.open).toHaveBeenCalledWith('Exporting form...', 'Close', { duration: 2000 });
373392
expect(document.createElement).toHaveBeenCalledWith('a');
393+
expect(mockAnchor.href).toContain('/api/events/1/1/form.zip');
394+
expect(mockAnchor.href).toContain('access_token=test-token');
395+
expect(mockAnchor.download).toBe('Test Form.zip');
396+
expect(document.body.appendChild).toHaveBeenCalledWith(mockAnchor);
397+
expect(mockAnchor.click).toHaveBeenCalled();
398+
expect(document.body.removeChild).toHaveBeenCalledWith(mockAnchor);
374399
});
375400

376401
it('should not export if token is not available', () => {
377402
component.token = null;
378-
spyOn(document, 'createElement');
379403

380404
component.exportForm();
381405

@@ -385,15 +409,10 @@ describe('FormDetailsComponent', () => {
385409

386410
it('should use default filename if form name is not set', () => {
387411
component.form = { id: 1 };
388-
const anchorElement = document.createElement('a');
389-
spyOn(document, 'createElement').and.returnValue(anchorElement);
390-
spyOn(document.body, 'appendChild');
391-
spyOn(document.body, 'removeChild');
392-
spyOn(anchorElement, 'click');
393412

394413
component.exportForm();
395414

396-
expect(anchorElement.download).toBe('form.zip');
415+
expect(mockAnchor.download).toBe('form.zip');
397416
});
398417
});
399418
});

web-app/admin/src/app/admin/admin-event/create-form/create-form.component.spec.ts

Lines changed: 0 additions & 137 deletions
This file was deleted.

web-app/admin/src/app/admin/admin-event/event-details/event-details.component.spec.ts

Lines changed: 10 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -962,47 +962,24 @@ describe('EventDetailsComponent', () => {
962962
expect(dialog.open).toHaveBeenCalled();
963963
});
964964

965-
it('should move form up', () => {
965+
it('should handle forms reordered', () => {
966966
eventsService.updateEvent.and.returnValue(of(component.event as any));
967-
const form = component.event!.forms![1];
968-
const event = new MouseEvent('click');
969-
970-
component.moveFormUp(event, form);
971-
972-
expect(eventsService.updateEvent).toHaveBeenCalled();
973-
expect(component.animatingFormId).toBe(form.id);
974-
});
975-
976-
it('should move form down', () => {
977-
eventsService.updateEvent.and.returnValue(of(component.event as any));
978-
const form = component.event!.forms![0];
979-
const event = new MouseEvent('click');
980-
981-
component.moveFormDown(event, form);
982-
983-
expect(eventsService.updateEvent).toHaveBeenCalled();
984-
expect(component.animatingFormId).toBe(form.id);
985-
});
986-
987-
it('should handle form drop', () => {
988-
eventsService.updateEvent.and.returnValue(of(component.event as any));
989-
const dropEvent = {
990-
previousIndex: 0,
991-
currentIndex: 1
992-
} as any;
967+
const reorderedForms = [
968+
{ id: 2, name: 'Form 2', archived: false },
969+
{ id: 1, name: 'Form 1', archived: false }
970+
];
993971

994-
component.onFormDrop(dropEvent);
972+
component.onFormsReordered(reorderedForms);
995973

996974
expect(eventsService.updateEvent).toHaveBeenCalled();
975+
expect(component.event!.forms![0].id).toBe(2);
976+
expect(component.event!.forms![1].id).toBe(1);
997977
});
998978

999-
it('should not perform operations without forms', () => {
979+
it('should not reorder forms when event has no forms', () => {
1000980
component.event!.forms = undefined;
1001-
const event = new MouseEvent('click');
1002981

1003-
component.moveFormUp(event, { id: 1 });
1004-
component.moveFormDown(event, { id: 1 });
1005-
component.onFormDrop({ previousIndex: 0, currentIndex: 1 } as any);
982+
component.onFormsReordered([]);
1006983

1007984
expect(eventsService.updateEvent).not.toHaveBeenCalled();
1008985
});

0 commit comments

Comments
 (0)