Skip to content
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
5 changes: 5 additions & 0 deletions .changeset/light-suns-appear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@chainlink/ftse-sftp-adapter': patch
---

Change interface of parser that isn't used yet
5 changes: 4 additions & 1 deletion packages/sources/ftse-sftp/src/parsing/base-parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ export abstract class BaseCSVParser<T extends ParsedData = ParsedData> implement
/**
* Abstract method that must be implemented by concrete classes
*/
abstract parse(csvContent: string): Promise<T>
abstract parse(csvContent: string): Promise<{
result: number
parsedData: T
}>

/**
* Helper method to parse CSV content as records with column headers
Expand Down
15 changes: 11 additions & 4 deletions packages/sources/ftse-sftp/src/parsing/ftse100.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,9 @@ export { EXPECTED_HEADERS, HEADER_ROW_NUMBER }
export interface FTSE100Data extends ParsedData {
indexCode: string
indexSectorName: string
numberOfConstituents: number | null
numberOfConstituents: number
indexBaseCurrency: string
gbpIndex: number | null
gbpIndex: number
}

/**
Expand All @@ -51,7 +51,10 @@ export class FTSE100Parser extends BaseCSVParser {
})
}

async parse(csvContent: string): Promise<FTSE100Data> {
async parse(csvContent: string): Promise<{
result: number
parsedData: FTSE100Data
}> {
const parsed = this.parseCSVRecords(csvContent, {
from_line: HEADER_ROW_NUMBER,
})
Expand All @@ -68,7 +71,11 @@ export class FTSE100Parser extends BaseCSVParser {
throw new Error('No FTSE 100 index record found')
}

return results[0]
const parsedData = results[0]
return {
result: parsedData.gbpIndex,
parsedData,
}
}

/**
Expand Down
5 changes: 4 additions & 1 deletion packages/sources/ftse-sftp/src/parsing/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ export interface CSVParser<T extends ParsedData = ParsedData> {
* @param csvContent - Raw CSV content as string
* @returns Promise of parsed data
*/
parse(csvContent: string): Promise<T>
parse(csvContent: string): Promise<{
result: number
parsedData: T
}>
}

/**
Expand Down
11 changes: 9 additions & 2 deletions packages/sources/ftse-sftp/src/parsing/russell.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ export class RussellDailyValuesParser extends BaseCSVParser {
this.instrument = instrument
}

async parse(csvContent: string): Promise<RussellDailyValuesData> {
async parse(csvContent: string): Promise<{
result: number
parsedData: RussellDailyValuesData
}> {
this.validateCloseColumn(csvContent)

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

return results[0]
const parsedData = results[0]
return {
result: parsedData.close,
parsedData,
}
}

/**
Expand Down
19 changes: 9 additions & 10 deletions packages/sources/ftse-sftp/test/unit/parsing/ftse100.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ describe('FTSE100Parser', () => {

describe('parse', () => {
it('should parse the actual FTSE CSV file correctly', async () => {
const result = await parser.parse(ftseCsvFixture)
expect(result).toBeDefined()
expect(result).toEqual(expectedFtseData)
const { parsedData, result } = await parser.parse(ftseCsvFixture)
expect(parsedData).toEqual(expectedFtseData)
expect(result).toBe(expectedFtseData.gbpIndex)
})

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

const result = await parser.parse(csvWithInconsistentColumns)
expect(result).toBeDefined()
expect(result.indexCode).toBe('UKX')
expect(result.indexSectorName).toBe('FTSE 100 Index')
expect(result.numberOfConstituents).toBe(100)
expect(result.indexBaseCurrency).toBe('GBP')
expect(result.gbpIndex).toBe(4926.97)
const { parsedData } = await parser.parse(csvWithInconsistentColumns)
expect(parsedData.indexCode).toBe('UKX')
expect(parsedData.indexSectorName).toBe('FTSE 100 Index')
expect(parsedData.numberOfConstituents).toBe(100)
expect(parsedData.indexBaseCurrency).toBe('GBP')
expect(parsedData.gbpIndex).toBe(4926.97)
})
})
})
13 changes: 6 additions & 7 deletions packages/sources/ftse-sftp/test/unit/parsing/russell.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ describe('RussellDailyValuesParser', () => {

describe('parse', () => {
it('should parse the actual Russell CSV file correctly', async () => {
const result = await parser.parse(russellCsvFixture)
expect(result).toBeDefined()
expect(result).toEqual(expectedRussellData)
const { parsedData, result } = await parser.parse(russellCsvFixture)
expect(parsedData).toEqual(expectedRussellData)
expect(result).toBe(expectedRussellData.close)
})

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

const result = await parser.parse(csvWithInconsistentColumns)
expect(result).toBeDefined()
expect(result.indexName).toBe('Russell 1000� Index')
expect(result.close).toBe(3547.4)
const { parsedData } = await parser.parse(csvWithInconsistentColumns)
expect(parsedData.indexName).toBe('Russell 1000� Index')
expect(parsedData.close).toBe(3547.4)
})
})
})
Loading