juice-shop

Форк
0
/
local-backup.service.spec.ts 
76 строк · 2.9 Кб
1
/*
2
 * Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3
 * SPDX-License-Identifier: MIT
4
 */
5

6
import { inject, TestBed, waitForAsync } from '@angular/core/testing'
7

8
import { LocalBackupService } from './local-backup.service'
9
import { CookieModule, CookieService } from 'ngx-cookie'
10
import { TranslateFakeLoader, TranslateLoader, TranslateModule } from '@ngx-translate/core'
11
import { MatSnackBar } from '@angular/material/snack-bar'
12
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
13
import * as FileSaver from 'file-saver'
14
import { ChallengeService } from './challenge.service'
15

16
describe('LocalBackupService', () => {
17
  let snackBar: any
18
  let cookieService: any
19
  let challengeService: any
20

21
  beforeEach(() => {
22
    snackBar = jasmine.createSpyObj('MatSnackBar', ['open'])
23
    snackBar.open.and.returnValue(null)
24
    challengeService = jasmine.createSpyObj('ChallengeService', ['restoreProgress', 'continueCode', 'continueCodeFindIt', 'continueCodeFixIt'])
25

26
    TestBed.configureTestingModule({
27
      imports: [
28
        CookieModule.forRoot(),
29
        TranslateModule.forRoot({
30
          loader: {
31
            provide: TranslateLoader,
32
            useClass: TranslateFakeLoader
33
          }
34
        }),
35
        BrowserAnimationsModule
36
      ],
37
      providers: [
38
        { provide: MatSnackBar, useValue: snackBar },
39
        { provide: ChallengeService, useValue: challengeService },
40
        CookieService,
41
        LocalBackupService
42
      ]
43
    })
44
    cookieService = TestBed.inject(CookieService)
45
  })
46

47
  it('should be created', inject([LocalBackupService], (service: LocalBackupService) => {
48
    expect(service).toBeTruthy()
49
  }))
50

51
  it('should save language to file', inject([LocalBackupService], (service: LocalBackupService) => {
52
    spyOn(FileSaver, 'saveAs').and.stub()
53

54
    cookieService.put('language', 'de')
55
    service.save()
56

57
    const blob = new Blob([JSON.stringify({ version: 1, language: 'de' })], { type: 'text/plain;charset=utf-8' })
58
    expect(FileSaver.saveAs).toHaveBeenCalledWith(blob, `owasp_juice_shop-${new Date().toISOString().split('T')[0]}.json`)
59
  }))
60

61
  it('should restore language from backup file', waitForAsync(inject([LocalBackupService], (service: LocalBackupService) => {
62
    cookieService.put('language', 'de')
63
    service.restore(new File(['{ "version": 1, "language": "cn" }'], 'test.json')).subscribe(() => {
64
      expect(cookieService.get('language')).toBe('cn')
65
      expect(snackBar.open).toHaveBeenCalled()
66
    })
67
  })))
68

69
  it('should not restore language from an outdated backup version', waitForAsync(inject([LocalBackupService], (service: LocalBackupService) => {
70
    cookieService.put('language', 'de')
71
    service.restore(new File(['{ "version": 0, "language": "cn" }'], 'test.json')).subscribe(() => {
72
      expect(cookieService.get('language')).toBe('de')
73
      expect(snackBar.open).toHaveBeenCalled()
74
    })
75
  })))
76
})
77

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.