From a981d278d6be48aec2f32898bcabda3aa2dc907a Mon Sep 17 00:00:00 2001 From: Thomas <4159106+dtslvr@users.noreply.github.com> Date: Wed, 24 May 2023 20:03:16 +0200 Subject: [PATCH] Clean up --- .../app/benchmark/benchmark.service.spec.ts | 97 ------------------- apps/client/src/app/app.component.ts | 2 +- .../admin-market-data.component.ts | 12 +-- .../admin-overview.component.ts | 2 +- .../admin-users/admin-users.component.ts | 2 +- .../home-market/home-market.component.ts | 2 +- .../home-summary/home-summary.component.ts | 2 +- .../src/app/core/http-response.interceptor.ts | 2 +- .../app/pages/about/about-page.component.ts | 2 +- .../pages/account/account-page.component.ts | 2 +- ...eate-or-update-account-dialog.component.ts | 2 +- .../app/pages/admin/admin-page.component.ts | 2 +- .../src/app/pages/blog/blog-page.component.ts | 2 +- .../src/app/pages/demo/demo-page.component.ts | 2 +- .../pages/features/features-page.component.ts | 2 +- .../src/app/pages/home/home-page.component.ts | 2 +- .../pages/landing/landing-page.component.ts | 2 +- .../src/app/pages/open/open-page.component.ts | 2 +- .../activities/activities-page.component.ts | 2 +- ...ate-or-update-activity-dialog.component.ts | 2 +- .../analysis/analysis-page.component.ts | 2 +- .../portfolio/portfolio-page.component.ts | 2 +- .../pages/pricing/pricing-page.component.ts | 2 +- .../pages/register/register-page.component.ts | 4 +- apps/client/src/app/services/data.service.ts | 33 ++----- 25 files changed, 33 insertions(+), 155 deletions(-) delete mode 100644 apps/api/src/app/benchmark/benchmark.service.spec.ts diff --git a/apps/api/src/app/benchmark/benchmark.service.spec.ts b/apps/api/src/app/benchmark/benchmark.service.spec.ts deleted file mode 100644 index faf77df6b..000000000 --- a/apps/api/src/app/benchmark/benchmark.service.spec.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { BenchmarkService } from './benchmark.service'; -import { PropertyService } from '@ghostfolio/api/services/property/property.service'; -import { PROPERTY_BENCHMARKS } from '@ghostfolio/common/config'; -import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; -import { NotFoundError } from '@ghostfolio/common/exceptions'; - -jest.mock('@ghostfolio/api/services/property/property.service', () => { - return { - PropertyService: jest.fn().mockImplementation(() => { - return { - getByKey: jest.fn().mockImplementation((key: string) => { - return [{ symbolProfileId: 'profile-id-1' }]; - }), - put: jest.fn().mockImplementation(({ key, value }) => { - return Promise.resolve(); - }) - }; - }) - }; -}); - -jest.mock('@ghostfolio/api/services/prisma/prisma.service', () => { - return { - PrismaService: jest.fn().mockImplementation(() => { - return { - symbolProfile: { - findFirst: jest.fn() - } - }; - }) - }; -}); - -describe('BenchmarkService', () => { - let benchmarkService: BenchmarkService; - let prismaService: PrismaService = new PrismaService(); - let propertyService: PropertyService = new PropertyService(prismaService); - - beforeAll(async () => { - benchmarkService = new BenchmarkService( - null, - null, - prismaService, - propertyService, - null, - null, - null - ); - }); - - it('calculateChangeInPercentage', async () => { - expect(benchmarkService.calculateChangeInPercentage(1, 2)).toEqual(1); - expect(benchmarkService.calculateChangeInPercentage(2, 2)).toEqual(0); - expect(benchmarkService.calculateChangeInPercentage(2, 1)).toEqual(-0.5); - }); - - it('should add new benchmark', async () => { - prismaService.symbolProfile.findFirst = jest - .fn() - .mockResolvedValueOnce( - Promise.resolve({ id: 'profile-id-2', name: 'Test Profile' }) - ); - - const result = await benchmarkService.addBenchmark({ - dataSource: 'YAHOO', - symbol: 'symbol-2' - }); - - expect(propertyService.put).toHaveBeenCalledWith({ - key: PROPERTY_BENCHMARKS, - value: JSON.stringify([ - { symbolProfileId: 'profile-id-1' }, - { symbolProfileId: 'profile-id-2' } - ]) - }); - expect(result).toEqual({ - dataSource: 'YAHOO', - id: 'profile-id-2', - name: 'Test Profile', - symbol: 'symbol-2' - }); - }); - - it('should throw error if symbol profile not found', async () => { - prismaService.symbolProfile.findFirst = jest - .fn() - .mockResolvedValueOnce(Promise.resolve(null)); - try { - await benchmarkService.addBenchmark({ - dataSource: 'YAHOO', - symbol: 'symbol-2' - }); - } catch (e) { - expect(e).toEqual(new NotFoundError('Symbol profile not found')); - } - }); -}); diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 9a419dc4a..2fc84b6aa 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -64,7 +64,7 @@ export class AppComponent implements OnDestroy, OnInit { const urlSegments = urlSegmentGroup.segments; this.currentRoute = urlSegments[0].path; - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); if (this.deviceType === 'mobile') { setTimeout(() => { diff --git a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts index ec16960e2..7abc79f96 100644 --- a/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts +++ b/apps/client/src/app/components/admin-market-data/admin-market-data.component.ts @@ -127,7 +127,7 @@ export class AdminMarketDataComponent implements OnDestroy, OnInit { } public ngOnInit() { - this.benchmarks = this.dataService.getInfo().benchmarks; + this.benchmarks = this.dataService.fetchInfo().benchmarks; this.deviceType = this.deviceService.getDeviceInfo().deviceType; this.filters$ @@ -209,15 +209,7 @@ export class AdminMarketDataComponent implements OnDestroy, OnInit { this.dataService .postBenchmark(benchmark) .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe((_) => { - this.dataService - .fetchInfo() - .pipe(takeUntil(this.unsubscribeSubject)) - .subscribe((info: InfoItem) => { - this.benchmarks = info.benchmarks; - (window as any) = info; - }); - }); + .subscribe(() => {}); } public onGatherSymbol({ dataSource, symbol }: UniqueAsset) { diff --git a/apps/client/src/app/components/admin-overview/admin-overview.component.ts b/apps/client/src/app/components/admin-overview/admin-overview.component.ts index 47112b99b..5aaa3e518 100644 --- a/apps/client/src/app/components/admin-overview/admin-overview.component.ts +++ b/apps/client/src/app/components/admin-overview/admin-overview.component.ts @@ -50,7 +50,7 @@ export class AdminOverviewComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) diff --git a/apps/client/src/app/components/admin-users/admin-users.component.ts b/apps/client/src/app/components/admin-users/admin-users.component.ts index 3c8b627d8..3b5ae9758 100644 --- a/apps/client/src/app/components/admin-users/admin-users.component.ts +++ b/apps/client/src/app/components/admin-users/admin-users.component.ts @@ -35,7 +35,7 @@ export class AdminUsersComponent implements OnDestroy, OnInit { private impersonationStorageService: ImpersonationStorageService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.hasPermissionForSubscription = hasPermission( this.info?.globalPermissions, diff --git a/apps/client/src/app/components/home-market/home-market.component.ts b/apps/client/src/app/components/home-market/home-market.component.ts index 315fd4874..e45a4d647 100644 --- a/apps/client/src/app/components/home-market/home-market.component.ts +++ b/apps/client/src/app/components/home-market/home-market.component.ts @@ -37,7 +37,7 @@ export class HomeMarketComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.isLoading = true; this.userService.stateChanged diff --git a/apps/client/src/app/components/home-summary/home-summary.component.ts b/apps/client/src/app/components/home-summary/home-summary.component.ts index 0ffaebaee..6ea7b8847 100644 --- a/apps/client/src/app/components/home-summary/home-summary.component.ts +++ b/apps/client/src/app/components/home-summary/home-summary.component.ts @@ -42,7 +42,7 @@ export class HomeSummaryComponent implements OnDestroy, OnInit { private snackBar: MatSnackBar, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.hasPermissionForSubscription = hasPermission( this.info?.globalPermissions, diff --git a/apps/client/src/app/core/http-response.interceptor.ts b/apps/client/src/app/core/http-response.interceptor.ts index 4064a7669..84390b44c 100644 --- a/apps/client/src/app/core/http-response.interceptor.ts +++ b/apps/client/src/app/core/http-response.interceptor.ts @@ -35,7 +35,7 @@ export class HttpResponseInterceptor implements HttpInterceptor { private snackBar: MatSnackBar, private webAuthnService: WebAuthnService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.hasPermissionForSubscription = hasPermission( this.info?.globalPermissions, diff --git a/apps/client/src/app/pages/about/about-page.component.ts b/apps/client/src/app/pages/about/about-page.component.ts index 05e43aec4..69f8eb093 100644 --- a/apps/client/src/app/pages/about/about-page.component.ts +++ b/apps/client/src/app/pages/about/about-page.component.ts @@ -31,7 +31,7 @@ export class AboutPageComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - const { globalPermissions, statistics } = this.dataService.getInfo(); + const { globalPermissions, statistics } = this.dataService.fetchInfo(); this.hasPermissionForBlog = hasPermission( globalPermissions, diff --git a/apps/client/src/app/pages/account/account-page.component.ts b/apps/client/src/app/pages/account/account-page.component.ts index e7fc74541..8f039b177 100644 --- a/apps/client/src/app/pages/account/account-page.component.ts +++ b/apps/client/src/app/pages/account/account-page.component.ts @@ -85,7 +85,7 @@ export class AccountPageComponent implements OnDestroy, OnInit { public webAuthnService: WebAuthnService ) { const { baseCurrency, currencies, globalPermissions, subscriptions } = - this.dataService.getInfo(); + this.dataService.fetchInfo(); this.baseCurrency = baseCurrency; this.currencies = currencies; diff --git a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts index 01d68057c..f0178f2f5 100644 --- a/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts +++ b/apps/client/src/app/pages/accounts/create-or-update-account-dialog/create-or-update-account-dialog.component.ts @@ -30,7 +30,7 @@ export class CreateOrUpdateAccountDialog implements OnDestroy { ) {} ngOnInit() { - const { currencies, platforms } = this.dataService.getInfo(); + const { currencies, platforms } = this.dataService.fetchInfo(); this.currencies = currencies; this.platforms = platforms; diff --git a/apps/client/src/app/pages/admin/admin-page.component.ts b/apps/client/src/app/pages/admin/admin-page.component.ts index a99956e0a..ccfafd806 100644 --- a/apps/client/src/app/pages/admin/admin-page.component.ts +++ b/apps/client/src/app/pages/admin/admin-page.component.ts @@ -18,7 +18,7 @@ export class AdminPageComponent implements OnDestroy, OnInit { private unsubscribeSubject = new Subject(); public constructor(private dataService: DataService) { - const { systemMessage } = this.dataService.getInfo(); + const { systemMessage } = this.dataService.fetchInfo(); this.hasMessage = !!systemMessage; } diff --git a/apps/client/src/app/pages/blog/blog-page.component.ts b/apps/client/src/app/pages/blog/blog-page.component.ts index 8a64e9ea0..db5454fbf 100644 --- a/apps/client/src/app/pages/blog/blog-page.component.ts +++ b/apps/client/src/app/pages/blog/blog-page.component.ts @@ -15,7 +15,7 @@ export class BlogPageComponent implements OnDestroy { private unsubscribeSubject = new Subject(); public constructor(private dataService: DataService) { - const info = this.dataService.getInfo(); + const info = this.dataService.fetchInfo(); this.hasPermissionForSubscription = hasPermission( info?.globalPermissions, diff --git a/apps/client/src/app/pages/demo/demo-page.component.ts b/apps/client/src/app/pages/demo/demo-page.component.ts index b9d63083f..c62ece50a 100644 --- a/apps/client/src/app/pages/demo/demo-page.component.ts +++ b/apps/client/src/app/pages/demo/demo-page.component.ts @@ -20,7 +20,7 @@ export class DemoPageComponent implements OnDestroy { private router: Router, private tokenStorageService: TokenStorageService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); } public ngOnInit() { diff --git a/apps/client/src/app/pages/features/features-page.component.ts b/apps/client/src/app/pages/features/features-page.component.ts index 6cb987949..2332e5a16 100644 --- a/apps/client/src/app/pages/features/features-page.component.ts +++ b/apps/client/src/app/pages/features/features-page.component.ts @@ -23,7 +23,7 @@ export class FeaturesPageComponent implements OnDestroy { private dataService: DataService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); } public ngOnInit() { diff --git a/apps/client/src/app/pages/home/home-page.component.ts b/apps/client/src/app/pages/home/home-page.component.ts index 7110ed2a8..168c41649 100644 --- a/apps/client/src/app/pages/home/home-page.component.ts +++ b/apps/client/src/app/pages/home/home-page.component.ts @@ -35,7 +35,7 @@ export class HomePageComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) diff --git a/apps/client/src/app/pages/landing/landing-page.component.ts b/apps/client/src/app/pages/landing/landing-page.component.ts index eeb2959c8..453534299 100644 --- a/apps/client/src/app/pages/landing/landing-page.component.ts +++ b/apps/client/src/app/pages/landing/landing-page.component.ts @@ -73,7 +73,7 @@ export class LandingPageComponent implements OnDestroy, OnInit { demoAuthToken, globalPermissions, statistics - } = this.dataService.getInfo(); + } = this.dataService.fetchInfo(); for (const country of countriesOfSubscribers) { this.countriesOfSubscribersMap[country] = { diff --git a/apps/client/src/app/pages/open/open-page.component.ts b/apps/client/src/app/pages/open/open-page.component.ts index 7347ee787..cf438a816 100644 --- a/apps/client/src/app/pages/open/open-page.component.ts +++ b/apps/client/src/app/pages/open/open-page.component.ts @@ -21,7 +21,7 @@ export class OpenPageComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - const { statistics } = this.dataService.getInfo(); + const { statistics } = this.dataService.fetchInfo(); this.statistics = statistics; } diff --git a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts index c9ee47e81..3e4d5ae66 100644 --- a/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/activities-page.component.ts @@ -81,7 +81,7 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit { } public ngOnInit() { - const { globalPermissions } = this.dataService.getInfo(); + const { globalPermissions } = this.dataService.fetchInfo(); this.deviceType = this.deviceService.getDeviceInfo().deviceType; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index 9843997e8..4f7b8aa92 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -81,7 +81,7 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { this.locale = this.data.user?.settings?.locale; this.dateAdapter.setLocale(this.locale); - const { currencies, platforms, tags } = this.dataService.getInfo(); + const { currencies, platforms, tags } = this.dataService.fetchInfo(); this.currencies = currencies; this.defaultDateFormat = getDateFormatString(this.locale); diff --git a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts index bb6ea18e5..75a66d828 100644 --- a/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts +++ b/apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts @@ -73,7 +73,7 @@ export class AnalysisPageComponent implements OnDestroy, OnInit { private router: Router, private userService: UserService ) { - const { benchmarks } = this.dataService.getInfo(); + const { benchmarks } = this.dataService.fetchInfo(); this.benchmarks = benchmarks; route.queryParams diff --git a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts index fcdecef0b..7b291b91d 100644 --- a/apps/client/src/app/pages/portfolio/portfolio-page.component.ts +++ b/apps/client/src/app/pages/portfolio/portfolio-page.component.ts @@ -34,7 +34,7 @@ export class PortfolioPageComponent implements OnDestroy, OnInit { private dataService: DataService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.userService.stateChanged .pipe(takeUntil(this.unsubscribeSubject)) diff --git a/apps/client/src/app/pages/pricing/pricing-page.component.ts b/apps/client/src/app/pages/pricing/pricing-page.component.ts index d7c27661c..4ac7d2a0d 100644 --- a/apps/client/src/app/pages/pricing/pricing-page.component.ts +++ b/apps/client/src/app/pages/pricing/pricing-page.component.ts @@ -41,7 +41,7 @@ export class PricingPageComponent implements OnDestroy, OnInit { ) {} public ngOnInit() { - const { baseCurrency, subscriptions } = this.dataService.getInfo(); + const { baseCurrency, subscriptions } = this.dataService.fetchInfo(); this.baseCurrency = baseCurrency; this.coupon = subscriptions?.default?.coupon; diff --git a/apps/client/src/app/pages/register/register-page.component.ts b/apps/client/src/app/pages/register/register-page.component.ts index 08665d662..ad8fc1df4 100644 --- a/apps/client/src/app/pages/register/register-page.component.ts +++ b/apps/client/src/app/pages/register/register-page.component.ts @@ -39,13 +39,13 @@ export class RegisterPageComponent implements OnDestroy, OnInit { private tokenStorageService: TokenStorageService, private userService: UserService ) { - this.info = this.dataService.getInfo(); + this.info = this.dataService.fetchInfo(); this.tokenStorageService.signOut(); } public ngOnInit() { - const { demoAuthToken, globalPermissions } = this.dataService.getInfo(); + const { demoAuthToken, globalPermissions } = this.dataService.fetchInfo(); this.demoAuthToken = demoAuthToken; this.deviceType = this.deviceService.getDeviceInfo().deviceType; diff --git a/apps/client/src/app/services/data.service.ts b/apps/client/src/app/services/data.service.ts index e622f46bd..32e7ba7ae 100644 --- a/apps/client/src/app/services/data.service.ts +++ b/apps/client/src/app/services/data.service.ts @@ -43,7 +43,7 @@ import { DataSource, Order as OrderModel } from '@prisma/client'; import { format, parseISO } from 'date-fns'; import { cloneDeep, groupBy, isNumber } from 'lodash'; import { Observable } from 'rxjs'; -import { map, take } from 'rxjs/operators'; +import { map } from 'rxjs/operators'; @Injectable({ providedIn: 'root' @@ -193,21 +193,18 @@ export class DataService { }); } - public fetchInfo(): Observable { + public fetchInfo(): InfoItem { + const info = cloneDeep((window as any).info); const utmSource = <'ios' | 'trusted-web-activity'>( window.localStorage.getItem('utm_source') ); - return this.http.get('/api/v1/info').pipe( - take(1), - map((info: InfoItem) => { - info.globalPermissions = filterGlobalPermissions( - info.globalPermissions, - utmSource - ); - return info; - }) + info.globalPermissions = filterGlobalPermissions( + info.globalPermissions, + utmSource ); + + return info; } public fetchInvestments({ @@ -394,20 +391,6 @@ export class DataService { ); } - public getInfo(): InfoItem { - const info = cloneDeep((window as any).info); - const utmSource = <'ios' | 'trusted-web-activity'>( - window.localStorage.getItem('utm_source') - ); - - info.globalPermissions = filterGlobalPermissions( - info.globalPermissions, - utmSource - ); - - return info; - } - public loginAnonymous(accessToken: string) { return this.http.post(`/api/v1/auth/anonymous`, { accessToken