Skip to content
This repository was archived by the owner on Sep 27, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .prettierrc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
module.exports = {
printWidth: 120,
semi: false,
singleQuote: true
}
4 changes: 1 addition & 3 deletions src/__mocks__/services/company-cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,7 @@ export class CompanyCache {
}

static putAll(companies: object): void {
Object.keys(companies).forEach(ticker =>
CompanyCache.put(ticker, companies[ticker][0])
)
Object.keys(companies).forEach(ticker => CompanyCache.put(ticker, companies[ticker][0]))
}

// for testing
Expand Down
4 changes: 1 addition & 3 deletions src/__mocks__/services/quarter-cache.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ export class QuarterCache {
}

static putData(ticker: string, quarter: object): void {
this.cache[
`${ticker}-${quarter['fiscal_year']}Q${quarter['fiscal_quarter']}`
] = quarter
this.cache[`${ticker}-${quarter['fiscal_year']}Q${quarter['fiscal_quarter']}`] = quarter
}

static putColumnDescription(columnDescription: object): void {
Expand Down
132 changes: 39 additions & 93 deletions src/api/company-service.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,9 @@ import { YearQuarterParam } from '~/fiscal-periods/year-quarter-param'
const LY = new LyWithOffset()
const LQ = new LqWithOffset()

jest.mock('~/api/v2/client', () =>
jest.requireActual('~/__mocks__/api/v2/client')
)
jest.mock('~/api/v3/client', () =>
jest.requireActual('~/__mocks__/api/v3/client')
)
jest.mock('~/services/company-cache', () =>
jest.requireActual('~/__mocks__/services/company-cache')
)
jest.mock('~/api/v2/client', () => jest.requireActual('~/__mocks__/api/v2/client'))
jest.mock('~/api/v3/client', () => jest.requireActual('~/__mocks__/api/v3/client'))
jest.mock('~/services/company-cache', () => jest.requireActual('~/__mocks__/services/company-cache'))

test('isSupportedTicker', () => {
const client = new CachingBuffettCodeApiClientV2('token')
Expand All @@ -29,106 +23,58 @@ test('isSupportedTicker', () => {
test('convertYearQuarterParamToYearQuarter', () => {
const client = new CachingBuffettCodeApiClientV2('token')
const service = new CompanyService('2371', client)
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, 3))).toEqual(new YearQuarter(2021, 3))
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(2016, LQ))).toEqual(new YearQuarter(2016, 2))
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, LQ))).toEqual(new YearQuarter(2021, 2))
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(new LyWithOffset(-5), LQ))).toEqual(
new YearQuarter(2016, 2)
)
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, new LqWithOffset(-1)))).toEqual(
new YearQuarter(2021, 1)
)
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, new LqWithOffset(-2)))).toEqual(
new YearQuarter(2020, 4)
)
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, new LqWithOffset(-3)))).toEqual(
new YearQuarter(2020, 3)
)
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, new LqWithOffset(-4)))).toEqual(
new YearQuarter(2020, 2)
)
expect(service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, new LqWithOffset(-5)))).toEqual(
new YearQuarter(2020, 1)
)
expect(
service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, 3))
).toEqual(new YearQuarter(2021, 3))
expect(
service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(2016, LQ))
).toEqual(new YearQuarter(2016, 2))
expect(
service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(LY, LQ))
).toEqual(new YearQuarter(2021, 2))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(new LyWithOffset(-5), LQ)
)
).toEqual(new YearQuarter(2016, 2))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(LY, new LqWithOffset(-1))
)
).toEqual(new YearQuarter(2021, 1))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(LY, new LqWithOffset(-2))
)
).toEqual(new YearQuarter(2020, 4))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(LY, new LqWithOffset(-3))
)
).toEqual(new YearQuarter(2020, 3))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(LY, new LqWithOffset(-4))
)
).toEqual(new YearQuarter(2020, 2))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(LY, new LqWithOffset(-5))
)
).toEqual(new YearQuarter(2020, 1))
expect(
service.convertYearQuarterParamToYearQuarter(
new YearQuarterParam(new LyWithOffset(-5), new LqWithOffset(-5))
)
service.convertYearQuarterParamToYearQuarter(new YearQuarterParam(new LyWithOffset(-5), new LqWithOffset(-5)))
).toEqual(new YearQuarter(2015, 1))
})

test('isOndemandQuarterApiPeriod', () => {
const client = new CachingBuffettCodeApiClientV2('token')
const service = new CompanyService('2371', client)

expect(service.isOndemandQuarterApiPeriod(new YearQuarter(2001, 4))).toBe(
true
)
expect(service.isOndemandQuarterApiPeriod(new YearQuarter(2016, 2))).toBe(
true
)
expect(service.isOndemandQuarterApiPeriod(new YearQuarter(2016, 3))).toBe(
false
)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(LY, 3))).toBe(
expect(service.isOndemandQuarterApiPeriod(new YearQuarter(2001, 4))).toBe(true)
expect(service.isOndemandQuarterApiPeriod(new YearQuarter(2016, 2))).toBe(true)
expect(service.isOndemandQuarterApiPeriod(new YearQuarter(2016, 3))).toBe(false)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(LY, 3))).toBe(false)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(2016, LQ))).toBe(true)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(LY, LQ))).toBe(false)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(new LyWithOffset(-4), new LqWithOffset(-3)))).toBe(
false
)
expect(
service.isOndemandQuarterApiPeriod(new YearQuarterParam(2016, LQ))
).toBe(true)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(LY, LQ))).toBe(
false
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(new LyWithOffset(-4), new LqWithOffset(-4)))).toBe(
true
)
expect(
service.isOndemandQuarterApiPeriod(
new YearQuarterParam(new LyWithOffset(-4), new LqWithOffset(-3))
)
).toBe(false)
expect(
service.isOndemandQuarterApiPeriod(
new YearQuarterParam(new LyWithOffset(-4), new LqWithOffset(-4))
)
).toBe(true)
expect(
service.isOndemandQuarterApiPeriod(
new YearQuarterParam(new LyWithOffset(-5), LQ)
)
).toBe(true)
expect(service.isOndemandQuarterApiPeriod(new YearQuarterParam(new LyWithOffset(-5), LQ))).toBe(true)
})

test('isOndemandDailyApiPeriod', () => {
const client = new CachingBuffettCodeApiClientV3('token')
const service = new CompanyService('2371', client)

expect(
service.isOndemandDailyApiPeriod(new DateParam(new Date('2003-10-10')))
).toBe(true)
expect(
service.isOndemandDailyApiPeriod(new DateParam(new Date('2016-11-12')))
).toBe(true)
expect(
service.isOndemandDailyApiPeriod(new DateParam(new Date('2016-11-13')))
).toBe(false)
expect(service.isOndemandDailyApiPeriod(new DateParam(new Date()))).toBe(
false
)
expect(service.isOndemandDailyApiPeriod(new DateParam(new Date('2003-10-10')))).toBe(true)
expect(service.isOndemandDailyApiPeriod(new DateParam(new Date('2016-11-12')))).toBe(true)
expect(service.isOndemandDailyApiPeriod(new DateParam(new Date('2016-11-13')))).toBe(false)
expect(service.isOndemandDailyApiPeriod(new DateParam(new Date()))).toBe(false)
expect(service.isOndemandDailyApiPeriod(new DateParam('latest'))).toBe(false)
})
14 changes: 4 additions & 10 deletions src/api/company-service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,14 @@ export class CompanyService {
return !!this.company
}

public convertYearQuarterParamToYearQuarter(
period: YearQuarterParam
): YearQuarter {
public convertYearQuarterParamToYearQuarter(period: YearQuarterParam): YearQuarter {
if (period.year instanceof LyWithOffset) {
period.year = this.company['latest_fiscal_year'] + period.year.offset
}

if (period.quarter instanceof LqWithOffset) {
period.year =
(period.year as number) + Math.ceil(period.quarter.offset / 4)
period.quarter =
this.company['latest_fiscal_quarter'] + (period.quarter.offset % 4)
period.year = (period.year as number) + Math.ceil(period.quarter.offset / 4)
period.quarter = this.company['latest_fiscal_quarter'] + (period.quarter.offset % 4)

if (period.quarter <= 0) {
period.year -= 1
Expand All @@ -43,9 +39,7 @@ export class CompanyService {
return period.toYearQuarter()
}

public isOndemandQuarterApiPeriod(
_period: YearQuarter | YearQuarterParam
): boolean {
public isOndemandQuarterApiPeriod(_period: YearQuarter | YearQuarterParam): boolean {
if (!this.isSupportedTicker()) {
throw new Error('unsupported ticker')
}
Expand Down
6 changes: 2 additions & 4 deletions src/api/http-error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,9 @@ export class HttpError implements Error {
public isInvalidTestingRequest(): boolean {
const content = this.response.getContentText()
return (
content ===
'{"message":"Testing Apikey is only allowed to ticker ending with \\"01\\""}' ||
content === '{"message":"Testing Apikey is only allowed to ticker ending with \\"01\\""}' ||
content === '{"message":"Testing apikey is not allowed"}' ||
content ===
'{"message":"Trial request only supports ticker ending \'01\'"}'
content === '{"message":"Trial request only supports ticker ending \'01\'"}'
)
}

Expand Down
24 changes: 6 additions & 18 deletions src/api/ondemand-api-period-range.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,19 @@ import { CachingBuffettCodeApiClientV2 } from '~/api/v2/caching-client'
import { YearQuarter } from '~/fiscal-periods/year-quarter'
import { YearQuarterRange } from '~/fiscal-periods/year-quarter-range'

jest.mock('~/api/v2/client', () =>
jest.requireActual('~/__mocks__/api/v2/client')
)
jest.mock('~/services/company-cache', () =>
jest.requireActual('~/__mocks__/services/company-cache')
)
jest.mock('~/api/v2/client', () => jest.requireActual('~/__mocks__/api/v2/client'))
jest.mock('~/services/company-cache', () => jest.requireActual('~/__mocks__/services/company-cache'))

test('selectOndemandQuarterApiPeriod', () => {
const ticker = '2371'
const client = new CachingBuffettCodeApiClientV2('token')
const companyService = new CompanyService(ticker, client)
const ondemandQuarterApiPeriodRange = new OndemandApiPeriodRange(
companyService
)
const ondemandQuarterApiPeriodRange = new OndemandApiPeriodRange(companyService)

const from = new YearQuarter(2014, 1)
const to = new YearQuarter(2017, 4)
const range = new YearQuarterRange(from, to)
expect(
ondemandQuarterApiPeriodRange.selectOndemandQuarterApiPeriod(ticker, range)
).toEqual([
expect(ondemandQuarterApiPeriodRange.selectOndemandQuarterApiPeriod(ticker, range)).toEqual([
new YearQuarter(2014, 1),
new YearQuarter(2014, 2),
new YearQuarter(2014, 3),
Expand All @@ -42,16 +34,12 @@ test('filterOndemandQuarterApiPeriod', () => {
const ticker = '2371'
const client = new CachingBuffettCodeApiClientV2('token')
const companyService = new CompanyService(ticker, client)
const ondemandQuarterApiPeriodRange = new OndemandApiPeriodRange(
companyService
)
const ondemandQuarterApiPeriodRange = new OndemandApiPeriodRange(companyService)

const from = new YearQuarter(2014, 1)
const to = new YearQuarter(2017, 4)
const range = new YearQuarterRange(from, to)
expect(
ondemandQuarterApiPeriodRange.filterOndemandQuarterApiPeriod(ticker, range)
).toEqual([
expect(ondemandQuarterApiPeriodRange.filterOndemandQuarterApiPeriod(ticker, range)).toEqual([
new YearQuarter(2016, 3),
new YearQuarter(2016, 4),
new YearQuarter(2017, 1),
Expand Down
18 changes: 4 additions & 14 deletions src/api/ondemand-api-period-range.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,11 @@ import { YearQuarterRange } from '~/fiscal-periods/year-quarter-range'
export class OndemandApiPeriodRange {
constructor(public companyService: CompanyService) {}

public selectOndemandQuarterApiPeriod(
ticker: string,
range: YearQuarterRange
): YearQuarter[] {
return range
.range()
.filter(period => this.companyService.isOndemandQuarterApiPeriod(period))
public selectOndemandQuarterApiPeriod(ticker: string, range: YearQuarterRange): YearQuarter[] {
return range.range().filter(period => this.companyService.isOndemandQuarterApiPeriod(period))
}

public filterOndemandQuarterApiPeriod(
ticker: string,
range: YearQuarterRange
): YearQuarter[] {
return range
.range()
.filter(period => !this.companyService.isOndemandQuarterApiPeriod(period))
public filterOndemandQuarterApiPeriod(ticker: string, range: YearQuarterRange): YearQuarter[] {
return range.range().filter(period => !this.companyService.isOndemandQuarterApiPeriod(period))
}
}
5 changes: 1 addition & 4 deletions src/api/test-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@ declare const global: any
// FIXME: Mockの型がみつからない
/* eslint @typescript-eslint/no-explicit-any: 0 */
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
export function useMockedUrlFetchApp(
responseCode: number,
contentText: string
) {
export function useMockedUrlFetchApp(responseCode: number, contentText: string) {
const mockGetResponseCode = jest.fn()
mockGetResponseCode.mockReturnValue(responseCode)

Expand Down
4 changes: 1 addition & 3 deletions src/api/url-builder.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,5 @@ test('toString', () => {
bar: 'baz?'
}
const builder = new UrlBuilder(endpoint, params)
expect(builder.toString()).toBe(
'https://example.com?foo=foo%20bar&bar=baz%3F'
)
expect(builder.toString()).toBe('https://example.com?foo=foo%20bar&bar=baz%3F')
})
Loading