juice-shop
76 строк · 2.9 Кб
1/*
2* Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3* SPDX-License-Identifier: MIT
4*/
5
6import { inject, TestBed, waitForAsync } from '@angular/core/testing'
7
8import { LocalBackupService } from './local-backup.service'
9import { CookieModule, CookieService } from 'ngx-cookie'
10import { TranslateFakeLoader, TranslateLoader, TranslateModule } from '@ngx-translate/core'
11import { MatSnackBar } from '@angular/material/snack-bar'
12import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
13import * as FileSaver from 'file-saver'
14import { ChallengeService } from './challenge.service'
15
16describe('LocalBackupService', () => {
17let snackBar: any
18let cookieService: any
19let challengeService: any
20
21beforeEach(() => {
22snackBar = jasmine.createSpyObj('MatSnackBar', ['open'])
23snackBar.open.and.returnValue(null)
24challengeService = jasmine.createSpyObj('ChallengeService', ['restoreProgress', 'continueCode', 'continueCodeFindIt', 'continueCodeFixIt'])
25
26TestBed.configureTestingModule({
27imports: [
28CookieModule.forRoot(),
29TranslateModule.forRoot({
30loader: {
31provide: TranslateLoader,
32useClass: TranslateFakeLoader
33}
34}),
35BrowserAnimationsModule
36],
37providers: [
38{ provide: MatSnackBar, useValue: snackBar },
39{ provide: ChallengeService, useValue: challengeService },
40CookieService,
41LocalBackupService
42]
43})
44cookieService = TestBed.inject(CookieService)
45})
46
47it('should be created', inject([LocalBackupService], (service: LocalBackupService) => {
48expect(service).toBeTruthy()
49}))
50
51it('should save language to file', inject([LocalBackupService], (service: LocalBackupService) => {
52spyOn(FileSaver, 'saveAs').and.stub()
53
54cookieService.put('language', 'de')
55service.save()
56
57const blob = new Blob([JSON.stringify({ version: 1, language: 'de' })], { type: 'text/plain;charset=utf-8' })
58expect(FileSaver.saveAs).toHaveBeenCalledWith(blob, `owasp_juice_shop-${new Date().toISOString().split('T')[0]}.json`)
59}))
60
61it('should restore language from backup file', waitForAsync(inject([LocalBackupService], (service: LocalBackupService) => {
62cookieService.put('language', 'de')
63service.restore(new File(['{ "version": 1, "language": "cn" }'], 'test.json')).subscribe(() => {
64expect(cookieService.get('language')).toBe('cn')
65expect(snackBar.open).toHaveBeenCalled()
66})
67})))
68
69it('should not restore language from an outdated backup version', waitForAsync(inject([LocalBackupService], (service: LocalBackupService) => {
70cookieService.put('language', 'de')
71service.restore(new File(['{ "version": 0, "language": "cn" }'], 'test.json')).subscribe(() => {
72expect(cookieService.get('language')).toBe('de')
73expect(snackBar.open).toHaveBeenCalled()
74})
75})))
76})
77