juice-shop
122 строки · 4.6 Кб
1/*
2* Copyright (c) 2014-2024 Bjoern Kimminich & the OWASP Juice Shop contributors.
3* SPDX-License-Identifier: MIT
4*/
5
6import { TranslateModule } from '@ngx-translate/core'7import { MatInputModule } from '@angular/material/input'8import { type ComponentFixture, fakeAsync, TestBed, waitForAsync } from '@angular/core/testing'9import { MatCardModule } from '@angular/material/card'10import { MatTableModule } from '@angular/material/table'11import { MatButtonModule } from '@angular/material/button'12import { BrowserAnimationsModule } from '@angular/platform-browser/animations'13import { HttpClientTestingModule } from '@angular/common/http/testing'14import { ReactiveFormsModule } from '@angular/forms'15import { MatButtonToggleModule } from '@angular/material/button-toggle'16import { RouterTestingModule } from '@angular/router/testing'17import { AddressService } from '../Services/address.service'18import { of } from 'rxjs/internal/observable/of'19import { throwError } from 'rxjs'20import { MatIconModule } from '@angular/material/icon'21import { MatTooltipModule } from '@angular/material/tooltip'22import { DeliveryService } from '../Services/delivery.service'23import { DeliveryMethodComponent } from './delivery-method.component'24import { PaymentComponent } from '../payment/payment.component'25import { PaymentMethodComponent } from '../payment-method/payment-method.component'26import { MatRadioModule } from '@angular/material/radio'27import { MatExpansionModule } from '@angular/material/expansion'28import { MatDividerModule } from '@angular/material/divider'29
30describe('DeliveryMethodComponent', () => {31let component: DeliveryMethodComponent32let fixture: ComponentFixture<DeliveryMethodComponent>33let addressService: any34let deliveryService: any35
36beforeEach(waitForAsync(() => {37addressService = jasmine.createSpyObj('AddressService', ['getById'])38addressService.getById.and.returnValue(of([]))39deliveryService = jasmine.createSpyObj('DeliveryService', ['get'])40deliveryService.get.and.returnValue(of([]))41
42TestBed.configureTestingModule({43declarations: [DeliveryMethodComponent, PaymentComponent, PaymentMethodComponent],44imports: [45RouterTestingModule.withRoutes([46{ path: 'payment/shop', component: PaymentComponent }47]),48HttpClientTestingModule,49TranslateModule.forRoot(),50BrowserAnimationsModule,51ReactiveFormsModule,52MatInputModule,53MatCardModule,54MatTableModule,55MatButtonModule,56MatButtonToggleModule,57MatIconModule,58MatTooltipModule,59MatRadioModule,60MatExpansionModule,61MatDividerModule
62],63providers: [64{ provide: AddressService, useValue: addressService },65{ provide: DeliveryService, useValue: deliveryService }66]67})68.compileComponents()69}))70
71beforeEach(() => {72fixture = TestBed.createComponent(DeliveryMethodComponent)73component = fixture.componentInstance74fixture.detectChanges()75})76
77it('should create', () => {78expect(component).toBeTruthy()79})80
81it('should log errors from address service directly to browser console', fakeAsync(() => {82addressService.getById.and.returnValue(throwError('Error'))83console.log = jasmine.createSpy('log')84component.ngOnInit()85expect(console.log).toHaveBeenCalledWith('Error')86}))87
88it('should log errors from delivery service directly to browser console', fakeAsync(() => {89deliveryService.get.and.returnValue(throwError('Error'))90console.log = jasmine.createSpy('log')91component.ngOnInit()92expect(console.log).toHaveBeenCalledWith('Error')93}))94
95it('should hold address on ngOnInit', () => {96addressService.getById.and.returnValue(of({ address: 'address' }))97component.ngOnInit()98expect(component.address).toEqual({ address: 'address' })99})100
101it('should hold delivery methods on ngOnInit', () => {102deliveryService.get.and.returnValue(of([{ id: 1, name: '1', price: 1, eta: 1, icon: '1' }]))103component.ngOnInit()104expect(component.methods[0].id).toEqual(1)105expect(component.methods[0].name).toEqual('1')106expect(component.methods[0].price).toEqual(1)107expect(component.methods[0].eta).toEqual(1)108expect(component.methods[0].icon).toEqual('1')109})110
111it('should store delivery method id on selectMethod', () => {112component.selectMethod(1)113expect(component.deliveryMethodId).toBe(1)114})115
116it('should store address id in session storage', () => {117component.deliveryMethodId = 1118spyOn(sessionStorage, 'setItem')119component.chooseDeliveryMethod()120expect(sessionStorage.setItem).toHaveBeenCalledWith('deliveryMethodId', '1')121})122})123