Skip to content

Commit

Permalink
Check if field uniqueness was removed
Browse files Browse the repository at this point in the history
  • Loading branch information
stefannegele committed Sep 22, 2023
1 parent 849ed6c commit 90a8717
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
26 changes: 26 additions & 0 deletions schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ const (
DatasetDifferenceTypeFieldRemoved
DatasetDifferenceTypeFieldTypeChanged
DatasetDifferenceTypeFieldRequirementRemoved
DatasetDifferenceTypeFieldUniquenessRemoved
)

func (d DatasetDifferenceType) String() string {
Expand All @@ -59,6 +60,8 @@ func (d DatasetDifferenceType) String() string {
return "field-type-changed"
case DatasetDifferenceTypeFieldRequirementRemoved:
return "field-requirement-removed"
case DatasetDifferenceTypeFieldUniquenessRemoved:
return "field-uniqueness-removed"
}

return ""
Expand Down Expand Up @@ -106,6 +109,7 @@ func CompareDatasets(old, new Dataset) (result []DatasetDifference) {
fieldRemoved,
fieldTypeChanged,
fieldRequirementRemoved,
fieldUniquenessRemoved,
}

for _, comparison := range comparisons {
Expand Down Expand Up @@ -199,6 +203,28 @@ func fieldRequirementRemoved(old, new Dataset) (result []DatasetDifference) {
return append(result, compareFields(old, new, &difference, nil)...)
}

func fieldUniquenessRemoved(old, new Dataset) (result []DatasetDifference) {
var difference fieldEquivalentExists = func(
modelName, fieldName string,
oldField, newField Field,
) *DatasetDifference {
if oldField.Unique && !newField.Unique {
return &DatasetDifference{
Type: DatasetDifferenceTypeFieldUniquenessRemoved,
Level: DatasetDifferenceLevelField,
Severity: DatasetDifferenceSeverityBreaking,
ModelName: modelName,
FieldName: fieldName,
Description: fmt.Sprintf("field uniqueness of '%v.%v' was removed", modelName, fieldName),
}
} else {
return nil
}
}

return append(result, compareFields(old, new, &difference, nil)...)
}

func equalStringPointers(s1, s2 *string) bool {
// both are the same (e.g. nil)
if s1 == s2 {
Expand Down
17 changes: 17 additions & 0 deletions schema_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,23 @@ func TestCompareDatasets(t *testing.T) {
Description: "field requirement of 'my_table.my_column' was removed",
}},
},
{
name: "fieldUniquenessRemoved",
args: args{
Dataset{Models: []Model{{Name: "my_table", Fields: []Field{
{Name: "my_column", Unique: true}}}}},
Dataset{Models: []Model{{Name: "my_table", Fields: []Field{
{Name: "my_column", Unique: false}}}}},
},
want: []DatasetDifference{{
Type: DatasetDifferenceTypeFieldUniquenessRemoved,
Level: DatasetDifferenceLevelField,
Severity: DatasetDifferenceSeverityBreaking,
ModelName: "my_table",
FieldName: "my_column",
Description: "field uniqueness of 'my_table.my_column' was removed",
}},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down

0 comments on commit 90a8717

Please sign in to comment.