Skip to content

Commit 3d01ef8

Browse files
authored
refactor: Isolate test mocks to fix pollution (#1252)
1 parent 4da14c3 commit 3d01ef8

6 files changed

Lines changed: 30 additions & 20 deletions

File tree

ui/cypress/e2e/spec.cy.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import mockIConv from "../../src/mocks/conv";
1+
import { createMockIConv } from "../../src/mocks/conv";
22

33
describe('template spec', () => {
44
let url = window.location.origin;
@@ -14,7 +14,7 @@ describe('template spec', () => {
1414

1515
it('verify direct connection to mysql non-sharded database', () => {
1616
cy.intercept('GET', `${url}/ping`, { statusCode: 200 }).as('checkBackendHealth');
17-
cy.intercept('GET', `${url}/convert/infoschema`, { statusCode: 200, body: mockIConv }).as('directConnection');
17+
cy.intercept('GET', `${url}/convert/infoschema`, { statusCode: 200, body: createMockIConv() }).as('directConnection');
1818

1919
cy.get('.primary-header').eq(0).should('have.text', 'Get started with Spanner migration tool');
2020
cy.get('#edit-icon').should('exist').click();

ui/src/app/components/add-index-form/add-index-form.component.spec.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import IRule from 'src/app/model/rule';
1212
import { ConversionService } from 'src/app/services/conversion/conversion.service';
1313
import { DataService } from 'src/app/services/data/data.service';
1414
import { SidenavService } from 'src/app/services/sidenav/sidenav.service';
15-
import mockIConv from 'src/mocks/conv';
15+
import { createMockIConv } from 'src/mocks/conv';
1616
import { AddIndexFormComponent } from './add-index-form.component';
1717

1818
describe('AddIndexFormComponent', () => {
@@ -22,6 +22,7 @@ describe('AddIndexFormComponent', () => {
2222
let sidenavServiceSpy: jasmine.SpyObj<SidenavService>;
2323
let fb: FormBuilder;
2424
let conversionServiceSpy: jasmine.SpyObj<ConversionService>;
25+
let localIConv: IConv;
2526

2627
beforeEach(async () => {
2728
dataServiceSpy = jasmine.createSpyObj('DataService', ['conv', 'applyRule', 'dropRule']);
@@ -55,7 +56,8 @@ describe('AddIndexFormComponent', () => {
5556
// Added the spy methods in beforeEach block because these are referred in the ngOnInit function
5657
conversionServiceSpy.getColIdFromSpannerColName.withArgs(jasmine.any(String),jasmine.any(String),jasmine.objectContaining<IConv>({})).and.returnValue("TestId")
5758
conversionServiceSpy.getTableIdFromSpName.withArgs(jasmine.any(String), jasmine.objectContaining<IConv>({})).and.returnValue("t1")
58-
dataServiceSpy.conv = of(mockIConv);
59+
localIConv = createMockIConv();
60+
dataServiceSpy.conv = of(localIConv);
5961
sidenavServiceSpy.sidenavAddIndexTable = of("t1");
6062
sidenavServiceSpy.displayRuleFlag = of(true)
6163
sidenavServiceSpy.ruleData = of()
@@ -98,10 +100,11 @@ describe('AddIndexFormComponent', () => {
98100
}
99101
sidenavServiceSpy.ruleData = of(addIndexRule)
100102
component.ngOnInit()
101-
const columnName = mockIConv.SpSchema[addIndexRule.Data.TableId]?.ColDefs[addIndexRule.Data.Keys[0].ColId].Name;
103+
component.ngOnInit()
104+
const columnName = localIConv.SpSchema[addIndexRule.Data.TableId]?.ColDefs[addIndexRule.Data.Keys[0].ColId].Name;
102105
expect(component.ColsArray.length).toBe(1);
103106
expect(component.ColsArray.at(0).value.columnName).toEqual(columnName);
104-
expect(component.addIndexForm.controls['tableName'].value).toEqual(mockIConv.SpSchema[addIndexRule.Data.TableId].Name);
107+
expect(component.addIndexForm.controls['tableName'].value).toEqual(localIConv.SpSchema[addIndexRule.Data.TableId].Name);
105108
expect(component.addIndexForm.controls['indexName'].value).toEqual(addIndexRule.Data.Name)
106109
expect(component.addIndexForm.status).toEqual("DISABLED");
107110
});
@@ -136,7 +139,7 @@ describe('AddIndexFormComponent', () => {
136139
],
137140
};
138141
component.setColArraysForViewRules(tableId, ruleData.Keys);
139-
const columnName = mockIConv.SpSchema[tableId]?.ColDefs[ruleData.Keys[0].ColId].Name;
142+
const columnName = localIConv.SpSchema[tableId]?.ColDefs[ruleData.Keys[0].ColId].Name;
140143
expect(component.ColsArray.length).toBe(1);
141144
expect(component.ColsArray.at(0).value.columnName).toEqual(columnName);
142145
});

ui/src/app/components/object-detail/object-detail.component.spec.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { MatIconModule } from '@angular/material/icon'
1212
import { MatSnackBar} from '@angular/material/snack-bar'
1313
import { DataService } from 'src/app/services/data/data.service'
1414
import { ConversionService } from 'src/app/services/conversion/conversion.service'
15-
import mockIConv from 'src/mocks/conv'
15+
import { createMockIConv } from 'src/mocks/conv'
1616
import { of } from 'rxjs'
1717
import { FormBuilder } from '@angular/forms'
1818
import { FlatNode } from 'src/app/model/schema-object-node'
@@ -26,10 +26,13 @@ describe('ObjectDetailComponent', () => {
2626
let fixture: ComponentFixture<ObjectDetailComponent>
2727
let dataServiceSpy: jasmine.SpyObj<DataService>;
2828
let conversionServiceSpy: jasmine.SpyObj<ConversionService>
29+
let mockIConv = createMockIConv();
2930
let dialogSpyObj: jasmine.SpyObj<MatDialog>;
3031
let rowData: IColumnTabData[]
3132

32-
beforeEach(async () => { dataServiceSpy = jasmine.createSpyObj('DataService', ['updateSequence', 'dropSequence', 'updateCheckConstraint', 'reviewTableUpdate', 'setInterleave', 'dropTable', 'getConversionRate']);
33+
beforeEach(async () => {
34+
mockIConv = createMockIConv();
35+
dataServiceSpy = jasmine.createSpyObj('DataService', ['updateSequence', 'dropSequence', 'updateCheckConstraint', 'reviewTableUpdate', 'setInterleave', 'dropTable', 'getConversionRate']);
3336
dataServiceSpy.updateSequence.and.returnValue(of({}));
3437
dataServiceSpy.dropSequence.and.returnValue(of(''));
3538
dataServiceSpy.reviewTableUpdate.and.returnValue(of(''));

ui/src/app/components/workspace/workspace.component.spec.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { InputType, ObjectExplorerNodeType, SourceDbNames, StorageKeys } from 's
1111
import { of, Subscription } from 'rxjs'
1212
import * as JSZip from 'jszip'
1313
import { FetchService } from 'src/app/services/fetch/fetch.service'
14-
import mockIConv, { mockIConv2 } from 'src/mocks/conv'
14+
import { createMockIConv, createMockIConv2 } from 'src/mocks/conv'
1515
import mockSpannerConfig from 'src/mocks/spannerConfig'
1616
import { ConversionService } from 'src/app/services/conversion/conversion.service'
1717
import { DataService } from 'src/app/services/data/data.service'
@@ -49,6 +49,7 @@ const mockStructuredReport: IStructuredReport = {
4949
describe('WorkspaceComponent', () => {
5050
let component: WorkspaceComponent
5151
let fixture: ComponentFixture<WorkspaceComponent>
52+
let mockIConv: IConv;
5253
let dialogSpyObj: jasmine.SpyObj<MatDialog>;
5354
let clickEventSpyObj: jasmine.SpyObj<ClickEventService>;
5455
let sidenavSpyObj: jasmine.SpyObj<SidenavService>;
@@ -58,6 +59,7 @@ describe('WorkspaceComponent', () => {
5859
let conversionServiceSpy: jasmine.SpyObj<ConversionService>;
5960

6061
beforeEach(async () => {
62+
mockIConv = createMockIConv();
6163
dialogSpyObj = jasmine.createSpyObj('MatDialog', ['open']);
6264
clickEventSpyObj = jasmine.createSpyObj('ClickEventService', ['setViewAssesmentData', 'setTabToSpanner']);
6365
sidenavSpyObj = jasmine.createSpyObj('SidenavService', ['openSidenav', 'setSidenavComponent', 'setSidenavDatabaseName', 'setMiddleColumnComponent']);
@@ -178,7 +180,7 @@ describe('WorkspaceComponent', () => {
178180
})
179181

180182
it('existing conv and data mismatch', () => {
181-
component.conv = mockIConv2
183+
component.conv = createMockIConv2()
182184
component.ngOnInit();
183185
expect(component.conv).toEqual(mockIConv)
184186
})
@@ -357,7 +359,7 @@ describe('WorkspaceComponent', () => {
357359
});
358360

359361
it('should return true when indexes are added or removed', () => {
360-
let mockData = mockIConv2;
362+
let mockData = createMockIConv2();
361363
const result = component.isIndexAddedOrRemoved(mockData);
362364
expect(result).toBeTruthy();
363365
});

ui/src/app/services/data/data.service.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { DataService } from './data.service'
44
import { FetchService } from '../fetch/fetch.service'
55
import { SnackbarService } from '../snackbar/snackbar.service'
66
import { of } from 'rxjs'
7-
import mockIConv from 'src/mocks/conv'
7+
import { createMockIConv } from 'src/mocks/conv'
88
import mockSpannerConfig from 'src/mocks/spannerConfig'
99

1010
describe('DataService', () => {
@@ -26,7 +26,7 @@ describe('DataService', () => {
2626
provideHttpClient(withInterceptorsFromDi()),
2727
]
2828
})
29-
fetchServiceSpy.getLastSessionDetails.and.returnValue(of(mockIConv));
29+
fetchServiceSpy.getLastSessionDetails.and.returnValue(of(createMockIConv()));
3030
fetchServiceSpy.getSpannerConfig.and.returnValue(of(mockSpannerConfig));
3131
fetchServiceSpy.getIsOffline.and.returnValue(of(false));
3232
snackbarService = TestBed.inject(SnackbarService);

ui/src/mocks/conv.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import IConv from "src/app/model/conv";
22

3-
const mockIConv: IConv = {
3+
export function createMockIConv(): IConv {
4+
return {
45
SpSchema: {
56
"t1": {
67
Name: "table1",
@@ -149,9 +150,11 @@ const mockIConv: IConv = {
149150
},
150151
},
151152
SrcSequences: {}
152-
};
153+
};
154+
}
153155

154-
export const mockIConv2: IConv = {
156+
export function createMockIConv2(): IConv {
157+
return {
155158
SpSchema: {
156159
"t1": {
157160
Name: "table1",
@@ -291,6 +294,5 @@ export const mockIConv2: IConv = {
291294
IsSharded: false,
292295
SpSequences: {},
293296
SrcSequences: {}
294-
};
295-
296-
export default mockIConv;
297+
};
298+
}

0 commit comments

Comments
 (0)