Skip to content

Commit 1e19986

Browse files
committed
fix(tests): update property edge and write access expectations across multiple language tests
1 parent 973c7bf commit 1e19986

File tree

12 files changed

+64
-31
lines changed

12 files changed

+64
-31
lines changed

gitnexus/test/integration/resolvers/cpp.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -840,8 +840,9 @@ describe('Field type resolution (C++)', () => {
840840

841841
it('emits HAS_PROPERTY edges linking fields to classes', () => {
842842
const propEdges = getRelationships(result, 'HAS_PROPERTY');
843-
expect(propEdges.length).toBeGreaterThanOrEqual(2);
843+
expect(propEdges.length).toBe(3);
844844
expect(edgeSet(propEdges)).toContain('User → address');
845+
expect(edgeSet(propEdges)).toContain('User → name');
845846
expect(edgeSet(propEdges)).toContain('Address → city');
846847
});
847848

@@ -952,7 +953,7 @@ describe('Write access tracking (C++)', () => {
952953
it('emits ACCESSES write edges for field assignments', () => {
953954
const accesses = getRelationships(result, 'ACCESSES');
954955
const writes = accesses.filter(e => e.rel.reason === 'write');
955-
expect(writes.length).toBeGreaterThanOrEqual(2);
956+
expect(writes.length).toBe(2);
956957
const fieldNames = writes.map(e => e.target);
957958
expect(fieldNames).toContain('name');
958959
expect(fieldNames).toContain('address');

gitnexus/test/integration/resolvers/csharp.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1221,7 +1221,7 @@ describe('Field type resolution (C#)', () => {
12211221

12221222
it('emits HAS_PROPERTY edges linking properties to classes', () => {
12231223
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1224-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1224+
expect(propEdges.length).toBe(3);
12251225
expect(edgeSet(propEdges)).toContain('User → Address');
12261226
expect(edgeSet(propEdges)).toContain('User → Name');
12271227
expect(edgeSet(propEdges)).toContain('Address → City');
@@ -1300,7 +1300,7 @@ describe('Write access tracking (C#)', () => {
13001300
it('emits ACCESSES write edges for field assignments', () => {
13011301
const accesses = getRelationships(result, 'ACCESSES');
13021302
const writes = accesses.filter(e => e.rel.reason === 'write');
1303-
expect(writes.length).toBeGreaterThanOrEqual(2);
1303+
expect(writes.length).toBe(2);
13041304
const fieldNames = writes.map(e => e.target);
13051305
expect(fieldNames).toContain('Name');
13061306
expect(fieldNames).toContain('Address');

gitnexus/test/integration/resolvers/go.test.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,10 @@ describe('Field type resolution (Go)', () => {
968968

969969
it('emits HAS_PROPERTY edges linking struct fields to structs', () => {
970970
const propEdges = getRelationships(result, 'HAS_PROPERTY');
971-
expect(propEdges.length).toBeGreaterThanOrEqual(2);
971+
expect(propEdges.length).toBe(3);
972+
expect(edgeSet(propEdges)).toContain('User → Name');
973+
expect(edgeSet(propEdges)).toContain('User → Address');
974+
expect(edgeSet(propEdges)).toContain('Address → City');
972975
});
973976

974977
it('resolves user.Address.Save() → Address#Save via field type', () => {
@@ -1008,7 +1011,12 @@ describe('Deep field chain resolution (Go)', () => {
10081011

10091012
it('emits HAS_PROPERTY edges for nested type chain', () => {
10101013
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1011-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1014+
expect(propEdges.length).toBe(5);
1015+
expect(edgeSet(propEdges)).toContain('User → Name');
1016+
expect(edgeSet(propEdges)).toContain('User → Address');
1017+
expect(edgeSet(propEdges)).toContain('Address → City');
1018+
expect(edgeSet(propEdges)).toContain('Address → Street');
1019+
expect(edgeSet(propEdges)).toContain('City → ZipCode');
10121020
});
10131021

10141022
it('resolves 2-level chain: user.Address.Save() → Address#Save', () => {

gitnexus/test/integration/resolvers/java.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1096,7 +1096,7 @@ describe('Field type resolution (Java)', () => {
10961096

10971097
it('emits HAS_PROPERTY edges linking properties to classes', () => {
10981098
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1099-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1099+
expect(propEdges.length).toBe(3);
11001100
expect(edgeSet(propEdges)).toContain('User → address');
11011101
expect(edgeSet(propEdges)).toContain('User → name');
11021102
expect(edgeSet(propEdges)).toContain('Address → city');

gitnexus/test/integration/resolvers/javascript.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,11 @@ describe('Field type resolution (JavaScript)', () => {
262262

263263
it('emits HAS_PROPERTY edges linking fields to classes', () => {
264264
const propEdges = getRelationships(result, 'HAS_PROPERTY');
265-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
265+
expect(propEdges.length).toBe(4);
266266
expect(edgeSet(propEdges)).toContain('User → address');
267267
expect(edgeSet(propEdges)).toContain('User → name');
268268
expect(edgeSet(propEdges)).toContain('Address → city');
269+
expect(edgeSet(propEdges)).toContain('Config → DEFAULT');
269270
});
270271
});
271272

@@ -285,7 +286,7 @@ describe('Write access tracking (JavaScript)', () => {
285286
it('emits ACCESSES write edges for field assignments', () => {
286287
const accesses = getRelationships(result, 'ACCESSES');
287288
const writes = accesses.filter(e => e.rel.reason === 'write');
288-
expect(writes.length).toBeGreaterThanOrEqual(2);
289+
expect(writes.length).toBe(2);
289290
const fieldNames = writes.map(e => e.target);
290291
expect(fieldNames).toContain('name');
291292
expect(fieldNames).toContain('address');

gitnexus/test/integration/resolvers/kotlin.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,7 +1246,7 @@ describe('Field type resolution (Kotlin)', () => {
12461246

12471247
it('emits HAS_PROPERTY edges linking properties to classes', () => {
12481248
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1249-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1249+
expect(propEdges.length).toBe(3);
12501250
expect(edgeSet(propEdges)).toContain('User → address');
12511251
expect(edgeSet(propEdges)).toContain('User → name');
12521252
expect(edgeSet(propEdges)).toContain('Address → city');
@@ -1367,13 +1367,16 @@ describe('Write access tracking (Kotlin)', () => {
13671367
it('emits ACCESSES write edges for property assignments', () => {
13681368
const accesses = getRelationships(result, 'ACCESSES');
13691369
const writes = accesses.filter(e => e.rel.reason === 'write');
1370-
expect(writes.length).toBeGreaterThanOrEqual(2);
1370+
expect(writes.length).toBe(3);
13711371
const nameWrite = writes.find(e => e.target === 'name');
13721372
const addressWrite = writes.find(e => e.target === 'address');
1373+
const scoreWrite = writes.find(e => e.target === 'score');
13731374
expect(nameWrite).toBeDefined();
13741375
expect(nameWrite!.source).toBe('updateUser');
13751376
expect(addressWrite).toBeDefined();
13761377
expect(addressWrite!.source).toBe('updateUser');
1378+
expect(scoreWrite).toBeDefined();
1379+
expect(scoreWrite!.source).toBe('updateUser');
13771380
});
13781381

13791382
it('emits ACCESSES write edge for compound assignment (+=)', () => {

gitnexus/test/integration/resolvers/php.test.ts

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ describe('PHP heritage & import resolution', () => {
138138

139139
it('emits OVERRIDES edge for User overriding log (inherited from BaseModel)', () => {
140140
const overrides = getRelationships(result, 'OVERRIDES');
141-
expect(overrides.length).toBeGreaterThanOrEqual(1);
141+
expect(overrides.length).toBe(1);
142142
const logOverride = overrides.find(e => e.source === 'User' && e.target === 'log');
143143
expect(logOverride).toBeDefined();
144144
});
@@ -1189,7 +1189,7 @@ describe('Field type resolution (PHP)', () => {
11891189

11901190
it('emits HAS_PROPERTY edges linking properties to classes', () => {
11911191
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1192-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1192+
expect(propEdges.length).toBe(3);
11931193
});
11941194

11951195
it('resolves $user->address->save() → Address#save via field type', () => {
@@ -1229,7 +1229,12 @@ describe('Deep field chain resolution (PHP)', () => {
12291229

12301230
it('emits HAS_PROPERTY edges for nested type chain', () => {
12311231
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1232-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1232+
expect(propEdges.length).toBe(5);
1233+
expect(edgeSet(propEdges)).toContain('User → name');
1234+
expect(edgeSet(propEdges)).toContain('User → address');
1235+
expect(edgeSet(propEdges)).toContain('Address → city');
1236+
expect(edgeSet(propEdges)).toContain('Address → street');
1237+
expect(edgeSet(propEdges)).toContain('City → zipCode');
12331238
});
12341239

12351240
it('resolves 2-level chain: $user->address->save() → Address#save', () => {
@@ -1303,14 +1308,16 @@ describe('Write access tracking (PHP)', () => {
13031308
it('emits ACCESSES write edges for field assignments', () => {
13041309
const accesses = getRelationships(result, 'ACCESSES');
13051310
const writes = accesses.filter(e => e.rel.reason === 'write');
1306-
// user->name (x2: simple + compound), user->address, User::$count
1307-
expect(writes.length).toBeGreaterThanOrEqual(2);
1311+
expect(writes.length).toBe(3);
13081312
const nameWrite = writes.find(e => e.target === 'name');
13091313
const addressWrite = writes.find(e => e.target === 'address');
1314+
const countWrite = writes.find(e => e.target === 'count');
13101315
expect(nameWrite).toBeDefined();
13111316
expect(nameWrite!.source).toBe('updateUser');
13121317
expect(addressWrite).toBeDefined();
13131318
expect(addressWrite!.source).toBe('updateUser');
1319+
expect(countWrite).toBeDefined();
1320+
expect(countWrite!.source).toBe('updateUser');
13141321
});
13151322

13161323
it('emits ACCESSES write edge for static property assignment', () => {

gitnexus/test/integration/resolvers/python.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -720,10 +720,10 @@ describe('Python static/classmethod class resolution (issue #289)', () => {
720720
const hasMethod = getRelationships(result, 'HAS_METHOD');
721721

722722
const userServiceMethods = hasMethod.filter(e => e.source === 'UserService');
723-
expect(userServiceMethods.length).toBeGreaterThanOrEqual(3); // find_user, create_user, from_config
723+
expect(userServiceMethods.length).toBe(3); // find_user, create_user, from_config
724724

725725
const adminServiceMethods = hasMethod.filter(e => e.source === 'AdminService');
726-
expect(adminServiceMethods.length).toBeGreaterThanOrEqual(2); // find_user, delete_user
726+
expect(adminServiceMethods.length).toBe(2); // find_user, delete_user
727727
});
728728

729729
it('resolves unique static method calls (create_user, delete_user, from_config)', () => {
@@ -1309,7 +1309,7 @@ describe('Field type resolution (Python)', () => {
13091309

13101310
it('emits HAS_PROPERTY edges linking attributes to classes', () => {
13111311
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1312-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1312+
expect(propEdges.length).toBe(3);
13131313
expect(edgeSet(propEdges)).toContain('User → address');
13141314
expect(edgeSet(propEdges)).toContain('User → name');
13151315
expect(edgeSet(propEdges)).toContain('Address → city');

gitnexus/test/integration/resolvers/ruby.test.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ describe('Ruby require_relative, heritage & property resolution', () => {
105105

106106
it('emits EXTENDS edge: User → BaseModel', () => {
107107
const extends_ = getRelationships(result, 'EXTENDS');
108-
expect(extends_.length).toBeGreaterThanOrEqual(1);
108+
expect(extends_.length).toBe(1);
109109
const edges = edgeSet(extends_);
110110
expect(edges).toContain('User → BaseModel');
111111
});
@@ -620,7 +620,7 @@ describe('Ruby return type inference via function call', () => {
620620
it('detects save method on both User and Repo (disambiguation required)', () => {
621621
const methods = getNodesByLabel(result, 'Method');
622622
// Both classes have save — fuzzy match alone cannot resolve this
623-
expect(methods.filter(m => m === 'save').length).toBeGreaterThanOrEqual(2);
623+
expect(methods.filter(m => m === 'save').length).toBe(2);
624624
});
625625

626626
it('resolves user.save to User#save via YARD @return [User] on get_user()', () => {
@@ -874,7 +874,7 @@ describe('Field type resolution (Ruby)', () => {
874874

875875
it('emits HAS_PROPERTY edges linking properties to classes', () => {
876876
const propEdges = getRelationships(result, 'HAS_PROPERTY');
877-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
877+
expect(propEdges.length).toBe(3);
878878
expect(edgeSet(propEdges)).toContain('User → address');
879879
expect(edgeSet(propEdges)).toContain('User → name');
880880
expect(edgeSet(propEdges)).toContain('Address → city');
@@ -938,13 +938,16 @@ describe('Write access tracking (Ruby)', () => {
938938
it('emits ACCESSES write edges for setter assignments', () => {
939939
const accesses = getRelationships(result, 'ACCESSES');
940940
const writes = accesses.filter(e => e.rel.reason === 'write');
941-
expect(writes.length).toBeGreaterThanOrEqual(2);
941+
expect(writes.length).toBe(3);
942942
const nameWrite = writes.find(e => e.target === 'name');
943943
const addressWrite = writes.find(e => e.target === 'address');
944+
const scoreWrite = writes.find(e => e.target === 'score');
944945
expect(nameWrite).toBeDefined();
945946
expect(nameWrite!.source).toBe('update_user');
946947
expect(addressWrite).toBeDefined();
947948
expect(addressWrite!.source).toBe('update_user');
949+
expect(scoreWrite).toBeDefined();
950+
expect(scoreWrite!.source).toBe('update_user');
948951
});
949952

950953
it('emits ACCESSES write edge for compound assignment (operator_assignment)', () => {

gitnexus/test/integration/resolvers/rust.test.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -702,7 +702,7 @@ describe('Rust ::default() constructor resolution', () => {
702702

703703
it('detects save methods on both structs', () => {
704704
const methods = [...getNodesByLabel(result, 'Function'), ...getNodesByLabel(result, 'Method')];
705-
expect(methods.filter((m: string) => m === 'save').length).toBeGreaterThanOrEqual(2);
705+
expect(methods.filter((m: string) => m === 'save').length).toBe(2);
706706
});
707707

708708
it('resolves user.save() in process_with_new() via User::new() constructor', () => {
@@ -774,7 +774,7 @@ describe('Rust async .await constructor binding resolution', () => {
774774

775775
it('detects save methods in separate files', () => {
776776
const methods = [...getNodesByLabel(result, 'Function'), ...getNodesByLabel(result, 'Method')];
777-
expect(methods.filter((m: string) => m === 'save').length).toBeGreaterThanOrEqual(2);
777+
expect(methods.filter((m: string) => m === 'save').length).toBe(2);
778778
});
779779

780780
it('resolves user.save() after .await to user.rs via return type of get_user()', () => {
@@ -1322,7 +1322,10 @@ describe('Field type resolution (Rust)', () => {
13221322

13231323
it('emits HAS_PROPERTY edges linking fields to structs', () => {
13241324
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1325-
expect(propEdges.length).toBeGreaterThanOrEqual(2);
1325+
expect(propEdges.length).toBe(3);
1326+
expect(edgeSet(propEdges)).toContain('User → name');
1327+
expect(edgeSet(propEdges)).toContain('User → address');
1328+
expect(edgeSet(propEdges)).toContain('Address → city');
13261329
});
13271330

13281331
it('resolves user.address.save() → Address#save via field type', () => {
@@ -1362,7 +1365,12 @@ describe('Deep field chain resolution (Rust)', () => {
13621365

13631366
it('emits HAS_PROPERTY edges for nested type chain', () => {
13641367
const propEdges = getRelationships(result, 'HAS_PROPERTY');
1365-
expect(propEdges.length).toBeGreaterThanOrEqual(3);
1368+
expect(propEdges.length).toBe(5);
1369+
expect(edgeSet(propEdges)).toContain('User → name');
1370+
expect(edgeSet(propEdges)).toContain('User → address');
1371+
expect(edgeSet(propEdges)).toContain('Address → city');
1372+
expect(edgeSet(propEdges)).toContain('Address → street');
1373+
expect(edgeSet(propEdges)).toContain('City → zip_code');
13661374
});
13671375

13681376
it('resolves 2-level chain: user.address.save() → Address#save', () => {
@@ -1396,10 +1404,11 @@ describe('Write access tracking (Rust)', () => {
13961404
it('emits ACCESSES write edges for field assignments', () => {
13971405
const accesses = getRelationships(result, 'ACCESSES');
13981406
const writes = accesses.filter(e => e.rel.reason === 'write');
1399-
expect(writes.length).toBeGreaterThanOrEqual(2);
1407+
expect(writes.length).toBe(3);
14001408
const fieldNames = writes.map(e => e.target);
14011409
expect(fieldNames).toContain('name');
14021410
expect(fieldNames).toContain('address');
1411+
expect(fieldNames).toContain('score');
14031412
const sources = writes.map(e => e.source);
14041413
expect(sources).toContain('update_user');
14051414
});

0 commit comments

Comments
 (0)