Skip to content
This repository was archived by the owner on Sep 27, 2023. It is now read-only.
Merged
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