Skip to content

Commit 46fff08

Browse files
authored
OPDATA-3889: Return a specific result from FTSE parsers (#4033)
* Return a specific result from FTSE parsers * changeset
1 parent 174b191 commit 46fff08

File tree

7 files changed

+48
-25
lines changed

7 files changed

+48
-25
lines changed

.changeset/light-suns-appear.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@chainlink/ftse-sftp-adapter': patch
3+
---
4+
5+
Change interface of parser that isn't used yet

packages/sources/ftse-sftp/src/parsing/base-parser.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@ export abstract class BaseCSVParser<T extends ParsedData = ParsedData> implement
1515
/**
1616
* Abstract method that must be implemented by concrete classes
1717
*/
18-
abstract parse(csvContent: string): Promise<T>
18+
abstract parse(csvContent: string): Promise<{
19+
result: number
20+
parsedData: T
21+
}>
1922

2023
/**
2124
* Helper method to parse CSV content as records with column headers

packages/sources/ftse-sftp/src/parsing/ftse100.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ export { EXPECTED_HEADERS, HEADER_ROW_NUMBER }
2929
export interface FTSE100Data extends ParsedData {
3030
indexCode: string
3131
indexSectorName: string
32-
numberOfConstituents: number | null
32+
numberOfConstituents: number
3333
indexBaseCurrency: string
34-
gbpIndex: number | null
34+
gbpIndex: number
3535
}
3636

3737
/**
@@ -51,7 +51,10 @@ export class FTSE100Parser extends BaseCSVParser {
5151
})
5252
}
5353

54-
async parse(csvContent: string): Promise<FTSE100Data> {
54+
async parse(csvContent: string): Promise<{
55+
result: number
56+
parsedData: FTSE100Data
57+
}> {
5558
const parsed = this.parseCSVRecords(csvContent, {
5659
from_line: HEADER_ROW_NUMBER,
5760
})
@@ -68,7 +71,11 @@ export class FTSE100Parser extends BaseCSVParser {
6871
throw new Error('No FTSE 100 index record found')
6972
}
7073

71-
return results[0]
74+
const parsedData = results[0]
75+
return {
76+
result: parsedData.gbpIndex,
77+
parsedData,
78+
}
7279
}
7380

7481
/**

packages/sources/ftse-sftp/src/parsing/interfaces.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ export interface CSVParser<T extends ParsedData = ParsedData> {
77
* @param csvContent - Raw CSV content as string
88
* @returns Promise of parsed data
99
*/
10-
parse(csvContent: string): Promise<T>
10+
parse(csvContent: string): Promise<{
11+
result: number
12+
parsedData: T
13+
}>
1114
}
1215

1316
/**

packages/sources/ftse-sftp/src/parsing/russell.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,10 @@ export class RussellDailyValuesParser extends BaseCSVParser {
3737
this.instrument = instrument
3838
}
3939

40-
async parse(csvContent: string): Promise<RussellDailyValuesData> {
40+
async parse(csvContent: string): Promise<{
41+
result: number
42+
parsedData: RussellDailyValuesData
43+
}> {
4144
this.validateCloseColumn(csvContent)
4245

4346
const parsed = this.parseCSVArrays(csvContent, {
@@ -56,7 +59,11 @@ export class RussellDailyValuesParser extends BaseCSVParser {
5659
throw new Error('Multiple matching Russell index records found, expected only one')
5760
}
5861

59-
return results[0]
62+
const parsedData = results[0]
63+
return {
64+
result: parsedData.close,
65+
parsedData,
66+
}
6067
}
6168

6269
/**

packages/sources/ftse-sftp/test/unit/parsing/ftse100.test.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ describe('FTSE100Parser', () => {
1010

1111
describe('parse', () => {
1212
it('should parse the actual FTSE CSV file correctly', async () => {
13-
const result = await parser.parse(ftseCsvFixture)
14-
expect(result).toBeDefined()
15-
expect(result).toEqual(expectedFtseData)
13+
const { parsedData, result } = await parser.parse(ftseCsvFixture)
14+
expect(parsedData).toEqual(expectedFtseData)
15+
expect(result).toBe(expectedFtseData.gbpIndex)
1616
})
1717

1818
it('should throw error for invalid CSV format', async () => {
@@ -76,13 +76,12 @@ UKX,FTSE 100 Index,100,GBP,4659.89,4926.97,4523.90
7676
AS0,FTSE All-Small Index,234,GBP,4535.81973790,4918.68240124,4401.18006784
7777
XXXXXXXX`
7878

79-
const result = await parser.parse(csvWithInconsistentColumns)
80-
expect(result).toBeDefined()
81-
expect(result.indexCode).toBe('UKX')
82-
expect(result.indexSectorName).toBe('FTSE 100 Index')
83-
expect(result.numberOfConstituents).toBe(100)
84-
expect(result.indexBaseCurrency).toBe('GBP')
85-
expect(result.gbpIndex).toBe(4926.97)
79+
const { parsedData } = await parser.parse(csvWithInconsistentColumns)
80+
expect(parsedData.indexCode).toBe('UKX')
81+
expect(parsedData.indexSectorName).toBe('FTSE 100 Index')
82+
expect(parsedData.numberOfConstituents).toBe(100)
83+
expect(parsedData.indexBaseCurrency).toBe('GBP')
84+
expect(parsedData.gbpIndex).toBe(4926.97)
8685
})
8786
})
8887
})

packages/sources/ftse-sftp/test/unit/parsing/russell.test.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ describe('RussellDailyValuesParser', () => {
1010

1111
describe('parse', () => {
1212
it('should parse the actual Russell CSV file correctly', async () => {
13-
const result = await parser.parse(russellCsvFixture)
14-
expect(result).toBeDefined()
15-
expect(result).toEqual(expectedRussellData)
13+
const { parsedData, result } = await parser.parse(russellCsvFixture)
14+
expect(parsedData).toEqual(expectedRussellData)
15+
expect(result).toBe(expectedRussellData.close)
1616
})
1717

1818
it('should throw error for invalid CSV format', async () => {
@@ -87,10 +87,9 @@ Russell 1000� Index,3538.25,3550.79,3534.60,3547.40,9.16,0.26,3547.40,3483.25,
8787
Russell 2000® Index,1234.56,1245.67,1230.45,1240.00,5.44,0.44
8888
XXXXXXXX`
8989

90-
const result = await parser.parse(csvWithInconsistentColumns)
91-
expect(result).toBeDefined()
92-
expect(result.indexName).toBe('Russell 1000� Index')
93-
expect(result.close).toBe(3547.4)
90+
const { parsedData } = await parser.parse(csvWithInconsistentColumns)
91+
expect(parsedData.indexName).toBe('Russell 1000� Index')
92+
expect(parsedData.close).toBe(3547.4)
9493
})
9594
})
9695
})

0 commit comments

Comments
 (0)