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
3 changes: 3 additions & 0 deletions bcda/attribution-import/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,8 @@ func getCCLFFileMetadata(cmsID, fileName string) (cclfFileMetadata, error) {
kcf = `K\d{4}`
// CCLF file name convention for DC: P.D****.ACO.ZC(Y|R)**.Dyymmdd.Thhmmsst
dc = `D\d{4}`
// CCLF file name convention for LEAD: P.L****.ACO.ZC(Y|R)**.Dyymmdd.Thhmmsst
lead = `L\d{4}`
// CCLF file name convention for TEST: P.TEST***.ACO.ZC(Y|R)**.Dyymmdd.Thhmmsst
test = `TEST\d{3}`
// CCLF file name convention for SBX: P.SBX*****.ACO.ZC(Y|R)**.Dyymmdd.Thhmmsst
Expand All @@ -198,6 +200,7 @@ func getCCLFFileMetadata(cmsID, fileName string) (cclfFileMetadata, error) {
ckcc + aco + `|` +
kcf + aco + `|` +
dc + aco + `|` +
lead + aco + `|` +
test + aco + `|` +
sandbox + aco +
`)` + suffix
Expand Down
62 changes: 52 additions & 10 deletions bcda/attribution-import/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ func TestGetCMSID(t *testing.T) {
{"not ZCY or ZCR", "path/T.BCD.A0001.ZC18.D181120.T1000000", true, ""},
{"missing ZCY and ZCR", "path/T.BCD.A0001.ZCA18.D181120.T1000000", true, ""},
{"validIotaPath", "path/T.BCD.IOTA123.ZCY18.D181120.T2000000", false, "IOTA123"},
{"validLEADPath", "path/T.BCD.L1234.ZCY18.D181120.T2000000", false, "L1234"},
{"empty", "", true, ""},
}
for _, tt := range tests {
Expand Down Expand Up @@ -217,16 +218,17 @@ func TestValidateCSVFileName(t *testing.T) {

func TestGetCCLFMetadata(t *testing.T) {
const (
sspID, iotaID, cecID, ngacoID, ckccID, kcfID, dcID, testID, sbxID = "A9999", "IOTA965", "E9999", "V999", "C9999", "K9999", "D9999", "TEST999", "SBXBD001"
sspProd, sspTest = "P.BCD." + sspID, "T.BCD." + sspID
iotaProd, iotaTest = "P." + iotaID + ".PRT", "T." + iotaID + ".PRT"
cecProd, cecTest = "P.CEC", "T.CEC"
ngacoProd, ngacoTest = "P." + ngacoID + ".ACO", "T." + ngacoID + ".ACO"
ckccProd, ckccTest = "P." + ckccID + ".ACO", "T." + ckccID + ".ACO"
kcfProd, kcfTest = "P." + kcfID + ".ACO", "T." + kcfID + ".ACO"
dcProd, dcTest = "P." + dcID + ".ACO", "T." + dcID + ".ACO"
testProd, testTest = "P." + testID + ".ACO", "T." + testID + ".ACO"
sbxProd, sbxTest = "P." + sbxID + ".ACO", "T." + sbxID + ".ACO"
sspID, iotaID, cecID, ngacoID, ckccID, kcfID, dcID, leadID, testID, sbxID = "A9999", "IOTA965", "E9999", "V999", "C9999", "K9999", "D9999", "L9999", "TEST999", "SBXBD001"
sspProd, sspTest = "P.BCD." + sspID, "T.BCD." + sspID
iotaProd, iotaTest = "P." + iotaID + ".PRT", "T." + iotaID + ".PRT"
cecProd, cecTest = "P.CEC", "T.CEC"
ngacoProd, ngacoTest = "P." + ngacoID + ".ACO", "T." + ngacoID + ".ACO"
ckccProd, ckccTest = "P." + ckccID + ".ACO", "T." + ckccID + ".ACO"
kcfProd, kcfTest = "P." + kcfID + ".ACO", "T." + kcfID + ".ACO"
dcProd, dcTest = "P." + dcID + ".ACO", "T." + dcID + ".ACO"
leadProd, leadTest = "P." + leadID + ".ACO", "T." + leadID + ".ACO"
testProd, testTest = "P." + testID + ".ACO", "T." + testID + ".ACO"
sbxProd, sbxTest = "P." + sbxID + ".ACO", "T." + sbxID + ".ACO"
)

start := time.Now()
Expand Down Expand Up @@ -255,6 +257,7 @@ func TestGetCCLFMetadata(t *testing.T) {
ckccProdFile, ckccTestFile := gen(ckccProd, validTime), gen(ckccTest, validTime)
kcfProdFile, kcfTestFile := gen(kcfProd, validTime), gen(kcfTest, validTime)
dcProdFile, dcTestFile := gen(dcProd, validTime), gen(dcTest, validTime)
leadProdFile, leadTestFile, leadRunoutFile := gen(leadProd, validTime), gen(leadTest, validTime), strings.Replace(gen(leadProd, validTime), "ZC8Y", "ZC8R", 1)
testProdFile, testTestFile := gen(testProd, validTime), gen(testTest, validTime)
sbxProdFile, sbxTestFile := gen(sbxProd, validTime), gen(sbxTest, validTime)

Expand All @@ -268,6 +271,9 @@ func TestGetCCLFMetadata(t *testing.T) {
{"Non CCLF0 or CCLF8 file", sspID, "P.A0001.ACO.ZC9Y18.D190108.T2355000", "invalid filename", cclfFileMetadata{}},
{"Unsupported CCLF file type", "Z9999", "P.Z0001.ACO.ZC8Y18.D190108.T2355000", "invalid filename", cclfFileMetadata{}},
{"Unsupported CSV file type", sspID, "P.PCPB.M2014.D00302.T2420001", "invalid filename", cclfFileMetadata{}},
{"LEAD file too few digits", leadID, "P.L123.ACO.ZC8Y18.D190108.T2355000", "invalid filename", cclfFileMetadata{}},
{"LEAD file too many digits", leadID, "P.L12345.ACO.ZC8Y18.D190108.T2355000", "invalid filename", cclfFileMetadata{}},
{"LEAD file invalid characters", leadID, "P.L123A.ACO.ZC8Y18.D190108.T2355000", "invalid filename", cclfFileMetadata{}},
{"Invalid date (no 13th month)", sspID, "T.BCD.A0001.ZC0Y18.D181320.T0001000", "failed to parse date", cclfFileMetadata{}},
{"CCLF file too old", sspID, gen(sspProd, startUTC.Add(-365*24*time.Hour)), "out of range", cclfFileMetadata{}},
{"CCLF file too new", sspID, gen(sspProd, startUTC.Add(365*24*time.Hour)), "out of range", cclfFileMetadata{}},
Expand Down Expand Up @@ -463,6 +469,42 @@ func TestGetCCLFMetadata(t *testing.T) {
fileType: models.FileTypeDefault,
},
},
{
"Production LEAD file", leadID, leadProdFile, "",
cclfFileMetadata{
env: "production",
name: leadProdFile,
cclfNum: 8,
acoID: leadID,
timestamp: validTime,
perfYear: perfYear,
fileType: models.FileTypeDefault,
},
},
{
"Test LEAD file", leadID, leadTestFile, "",
cclfFileMetadata{
env: "test",
name: leadTestFile,
cclfNum: 8,
acoID: leadID,
timestamp: validTime,
perfYear: perfYear,
fileType: models.FileTypeDefault,
},
},
{
"Runout LEAD file", leadID, leadRunoutFile, "",
cclfFileMetadata{
env: "production",
name: leadRunoutFile,
cclfNum: 8,
acoID: leadID,
timestamp: validTime,
perfYear: perfYear,
fileType: models.FileTypeRunout,
},
},
{
"Production TEST file", testID, testProdFile, "",
cclfFileMetadata{
Expand Down
7 changes: 6 additions & 1 deletion bcda/service/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func TestLoadConfig(t *testing.T) {
cfg, err := LoadConfig()
assert.NoError(t, err)
assert.NotNil(t, cfg)
assert.Len(t, cfg.ACOConfigs, 16)
assert.Len(t, cfg.ACOConfigs, 17)
for _, acoCfg := range cfg.ACOConfigs {
assert.NotNil(t, acoCfg.patternExp)
if acoCfg.PerfYearTransition != "" {
Expand Down Expand Up @@ -171,6 +171,11 @@ func TestSupportedACOs(t *testing.T) {
{"ACCESS too long", "ACCES9999999", false},
{"ACCESS invalid characters", "ACCES-99999", false},
{"valid ACCESS", "ACCES99999", true},

{"LEAD too short", "L999", false},
{"LEAD too long", "L99999", false},
{"LEAD invalid characters", "L999V", false},
{"valid LEAD", "L9999", true},
}

for _, tt := range tests {
Expand Down
8 changes: 8 additions & 0 deletions conf/configs/dev.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,21 @@ aco_config:
data:
- 'adjudicated'
- 'partially-adjudicated'
- model: 'LEAD'
name_pattern: '^L\d{4}$'
performance_year_transition: '01/01'
lookback_period: 3
data:
- 'adjudicated'
- 'partially-adjudicated'
rate_limit_config:
all: false
acos: []
v1_v2_deny_regexes:
- '^ACCES\d{5}$'
- '^GUIDE-\d{4}$'
- '^DPC-\d+$'
- '^L\d{4}$'
v3_no_partial_claims_models:
- 'GUIDE'

Expand Down
8 changes: 8 additions & 0 deletions conf/configs/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,20 @@ aco_config:
data:
- 'adjudicated'
- 'partially-adjudicated'
- model: 'LEAD'
name_pattern: '^L\d{4}$'
performance_year_transition: '01/01'
lookback_period: 3
data:
- 'adjudicated'
- 'partially-adjudicated'
rate_limit_config:
all: true
acos: []
v1_v2_deny_regexes:
- '^IOTA\d{3}'
- '^ACCES\d{5}$'
- '^GUIDE-\d{4}$'
- '^L\d{4}$'
v3_no_partial_claims_models:
- 'GUIDE'
Loading