juice-shop
126 строк · 4.5 Кб
1/*
2* Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3* SPDX-License-Identifier: MIT
4*/
5
6import { type ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'
7
8import { TwoFactorAuthEnterComponent } from './two-factor-auth-enter.component'
9import { SearchResultComponent } from '../search-result/search-result.component'
10import { UserService } from '../Services/user.service'
11import { WindowRefService } from '../Services/window-ref.service'
12
13import { ReactiveFormsModule } from '@angular/forms'
14import { HttpClientTestingModule } from '@angular/common/http/testing'
15import { RouterTestingModule } from '@angular/router/testing'
16import { BrowserAnimationsModule } from '@angular/platform-browser/animations'
17
18import { TranslateModule } from '@ngx-translate/core'
19import { CookieModule, CookieService } from 'ngx-cookie'
20
21import { MatCardModule } from '@angular/material/card'
22import { MatFormFieldModule } from '@angular/material/form-field'
23import { MatButtonModule } from '@angular/material/button'
24import { MatInputModule } from '@angular/material/input'
25import { MatCheckboxModule } from '@angular/material/checkbox'
26import { MatIconModule } from '@angular/material/icon'
27import { MatTableModule } from '@angular/material/table'
28import { MatPaginatorModule } from '@angular/material/paginator'
29import { MatDialogModule } from '@angular/material/dialog'
30import { MatDividerModule } from '@angular/material/divider'
31import { MatGridListModule } from '@angular/material/grid-list'
32import { MatSnackBarModule } from '@angular/material/snack-bar'
33import { MatTooltipModule } from '@angular/material/tooltip'
34
35import { of } from 'rxjs'
36import { TwoFactorAuthService } from '../Services/two-factor-auth-service'
37
38describe('TwoFactorAuthEnterComponent', () => {
39let component: TwoFactorAuthEnterComponent
40let fixture: ComponentFixture<TwoFactorAuthEnterComponent>
41let cookieService: any
42let userService: any
43let twoFactorAuthService: any
44
45beforeEach(waitForAsync(() => {
46userService = jasmine.createSpyObj('UserService', ['login'])
47userService.login.and.returnValue(of({}))
48userService.isLoggedIn = jasmine.createSpyObj('userService.isLoggedIn', ['next'])
49userService.isLoggedIn.next.and.returnValue({})
50twoFactorAuthService = jasmine.createSpyObj('TwoFactorAuthService', ['verify'])
51twoFactorAuthService.verify.and.returnValue(of({ }))
52
53TestBed.configureTestingModule({
54imports: [
55HttpClientTestingModule,
56RouterTestingModule.withRoutes([
57{ path: 'search', component: SearchResultComponent }
58]),
59ReactiveFormsModule,
60CookieModule.forRoot(),
61TranslateModule.forRoot(),
62BrowserAnimationsModule,
63MatCheckboxModule,
64MatFormFieldModule,
65MatCardModule,
66MatIconModule,
67MatInputModule,
68MatTableModule,
69MatPaginatorModule,
70MatDialogModule,
71MatDividerModule,
72MatButtonModule,
73MatGridListModule,
74MatSnackBarModule,
75MatTooltipModule
76],
77declarations: [TwoFactorAuthEnterComponent, SearchResultComponent],
78providers: [
79{ provide: UserService, useValue: userService },
80{ provide: TwoFactorAuthService, useValue: twoFactorAuthService },
81CookieService,
82WindowRefService,
83CookieService
84]
85})
86.compileComponents()
87cookieService = TestBed.inject(CookieService)
88}))
89
90beforeEach(() => {
91fixture = TestBed.createComponent(TwoFactorAuthEnterComponent)
92component = fixture.componentInstance
93fixture.detectChanges()
94})
95
96it('should create', () => {
97expect(component).toBeTruthy()
98})
99
100it('should store authentication token in cookie', () => {
101twoFactorAuthService.verify.and.returnValue(of({ token: 'TOKEN' }))
102component.verify()
103
104expect(cookieService.get('token')).toBe('TOKEN')
105})
106
107it('should store authentication token in local storage', () => {
108twoFactorAuthService.verify.and.returnValue(of({ token: 'TOKEN' }))
109component.verify()
110
111expect(localStorage.getItem('token')).toBe('TOKEN')
112})
113
114it('should store basket ID in session storage', () => {
115twoFactorAuthService.verify.and.returnValue(of({ bid: 42 }))
116component.verify()
117
118expect(sessionStorage.getItem('bid')).toBe('42')
119})
120
121xit('should notify about user login after 2FA verification', () => { // FIXME Spy call is not registered at all
122component.verify()
123
124expect(userService.isLoggedIn.next).toHaveBeenCalledWith(true)
125})
126})
127