mirror of https://github.com/ghostfolio/ghostfolio
committed by
Thomas Kaul
4 changed files with 155 additions and 63 deletions
@ -0,0 +1,23 @@ |
|||
import { LookupResponse } from '@ghostfolio/common/interfaces'; |
|||
|
|||
import { Observable } from 'rxjs'; |
|||
|
|||
export class HttpClientMock { |
|||
public constructor( |
|||
private readonly url: string, |
|||
private readonly mockData: LookupResponse |
|||
) {} |
|||
|
|||
get<T>(url: string, options?: any): Observable<T> { |
|||
if (url === this.url && options) { |
|||
return new Observable<T>((subscriber) => { |
|||
subscriber.next(this.mockData as T); |
|||
subscriber.complete(); |
|||
}); |
|||
} |
|||
|
|||
return new Observable<T>((subscriber) => { |
|||
subscriber.error(new Error(`No mock data for URL: ${url}`)); |
|||
}); |
|||
} |
|||
} |
@ -0,0 +1,108 @@ |
|||
import { LookupItem } from '@ghostfolio/common/interfaces'; |
|||
|
|||
import { CommonModule } from '@angular/common'; |
|||
import { HttpClient } from '@angular/common/http'; |
|||
import { importProvidersFrom } from '@angular/core'; |
|||
import { |
|||
FormControl, |
|||
FormsModule, |
|||
NgControl, |
|||
ReactiveFormsModule |
|||
} from '@angular/forms'; |
|||
import { provideNoopAnimations } from '@angular/platform-browser/animations'; |
|||
import { applicationConfig, Meta, StoryObj } from '@storybook/angular'; |
|||
|
|||
import { HttpClientMock } from './mocks/httpClient.mock'; |
|||
import { GfSymbolAutocompleteComponent } from './symbol-autocomplete.component'; |
|||
|
|||
const FILTERED_OPTIONS: LookupItem[] = [ |
|||
{ |
|||
assetClass: 'COMMODITY', |
|||
assetSubClass: 'ETF', |
|||
currency: 'USD', |
|||
dataProviderInfo: { name: 'YAHOO', isPremium: false }, |
|||
dataSource: null, |
|||
name: 'Test3', |
|||
symbol: 'TEST3' |
|||
}, |
|||
{ |
|||
assetClass: 'EQUITY', |
|||
assetSubClass: 'STOCK', |
|||
currency: 'USD', |
|||
dataProviderInfo: { name: 'YAHOO', isPremium: false }, |
|||
dataSource: null, |
|||
name: 'Test4', |
|||
symbol: 'TEST4' |
|||
} |
|||
]; |
|||
|
|||
export default { |
|||
title: 'Symbol Autocomplete', |
|||
component: GfSymbolAutocompleteComponent, |
|||
decorators: [ |
|||
applicationConfig({ |
|||
providers: [ |
|||
provideNoopAnimations(), |
|||
importProvidersFrom(CommonModule, FormsModule, ReactiveFormsModule), |
|||
{ |
|||
provide: NgControl, |
|||
useValue: { |
|||
control: new FormControl(), |
|||
valueAccessor: null |
|||
} |
|||
}, |
|||
{ |
|||
provide: HttpClient, |
|||
useValue: new HttpClientMock('/api/v1/symbol/lookup', { |
|||
items: FILTERED_OPTIONS |
|||
}) |
|||
} |
|||
] |
|||
}) |
|||
], |
|||
parameters: { |
|||
mockData: [ |
|||
{ |
|||
url: '/api/v1/symbol/lookup', |
|||
method: 'GET', |
|||
status: 200, |
|||
response: { |
|||
items: FILTERED_OPTIONS |
|||
} |
|||
} |
|||
] |
|||
} |
|||
} as Meta<GfSymbolAutocompleteComponent>; |
|||
|
|||
type Story = StoryObj<GfSymbolAutocompleteComponent>; |
|||
|
|||
export const WithoutDefaults: Story = { |
|||
args: { |
|||
defaultLookupItems: [] |
|||
} |
|||
}; |
|||
|
|||
export const WithDefaults: Story = { |
|||
args: { |
|||
defaultLookupItems: [ |
|||
{ |
|||
assetClass: 'COMMODITY', |
|||
assetSubClass: 'ETF', |
|||
currency: 'USD', |
|||
dataProviderInfo: { name: 'YAHOO', isPremium: false }, |
|||
dataSource: null, |
|||
name: 'Test1', |
|||
symbol: 'TEST1' |
|||
}, |
|||
{ |
|||
assetClass: 'EQUITY', |
|||
assetSubClass: 'STOCK', |
|||
currency: 'USD', |
|||
dataProviderInfo: { name: 'YAHOO', isPremium: false }, |
|||
dataSource: null, |
|||
name: 'Test2', |
|||
symbol: 'TEST2' |
|||
} |
|||
] |
|||
} |
|||
}; |
Loading…
Reference in new issue