@@ -10,6 +10,7 @@ import {
10
10
type dependencyManifestTypes ,
11
11
manifestApiTypes ,
12
12
} from "@stackcore/shared" ;
13
+ import { downloadJsonFromBucket } from "../../bucketStorage/index.ts" ;
13
14
14
15
// Helper function to provide default project configuration values
15
16
function getDefaultProjectConfig ( ) {
@@ -80,13 +81,62 @@ Deno.test("create a manifest", async () => {
80
81
. where ( "name" , "=" , "Test Project" )
81
82
. executeTakeFirstOrThrow ( ) ;
82
83
84
+ const sampleManifest : dependencyManifestTypes . DependencyManifest = {
85
+ "src/index.py" : {
86
+ id : "src/index.py" ,
87
+ filePath : "src/index.py" ,
88
+ language : "python" ,
89
+ metrics : {
90
+ linesCount : 12 ,
91
+ codeLineCount : 8 ,
92
+ characterCount : 200 ,
93
+ codeCharacterCount : 150 ,
94
+ dependencyCount : 1 ,
95
+ dependentCount : 0 ,
96
+ cyclomaticComplexity : 3 ,
97
+ } ,
98
+ dependencies : {
99
+ "./utils" : {
100
+ id : "./utils" ,
101
+ isExternal : false ,
102
+ symbols : { } ,
103
+ } ,
104
+ } ,
105
+ dependents : { } ,
106
+ symbols : {
107
+ "MyClass" : {
108
+ id : "MyClass" ,
109
+ type : "class" as const ,
110
+ metrics : {
111
+ linesCount : 12 ,
112
+ codeLineCount : 8 ,
113
+ characterCount : 200 ,
114
+ codeCharacterCount : 150 ,
115
+ dependencyCount : 1 ,
116
+ dependentCount : 0 ,
117
+ cyclomaticComplexity : 3 ,
118
+ } ,
119
+ description : "" ,
120
+ dependencies : {
121
+ "./utils.py" : {
122
+ id : "./utils.py" ,
123
+ isExternal : false ,
124
+ symbols : { } ,
125
+ } ,
126
+ } ,
127
+ dependents : { } ,
128
+ } ,
129
+ } ,
130
+ } ,
131
+ } ;
132
+
83
133
// Create a manifest via API
84
134
const { url, method, body } = manifestApiTypes . prepareCreateManifest ( {
85
135
projectId : project . id ,
86
136
branch : "main" ,
87
137
commitSha : "abc123" ,
88
138
commitShaDate : new Date ( ) ,
89
- manifest : { test : "data" } ,
139
+ manifest : sampleManifest ,
90
140
} ) ;
91
141
92
142
const createResponse = await api . handle (
@@ -116,6 +166,10 @@ Deno.test("create a manifest", async () => {
116
166
assertEquals ( manifest . branch , "main" ) ;
117
167
assertEquals ( manifest . commitSha , "abc123" ) ;
118
168
assertEquals ( manifest . version , 1 ) ;
169
+
170
+ // Verify manifest was created in bucket
171
+ const manifestContent = await downloadJsonFromBucket ( manifest . manifest ) ;
172
+ assertEquals ( manifestContent , sampleManifest ) ;
119
173
} finally {
120
174
await resetTables ( ) ;
121
175
await destroyKyselyDb ( ) ;
@@ -774,16 +828,61 @@ Deno.test("get manifest details", async () => {
774
828
775
829
// Create manifest
776
830
const manifestService = new ManifestService ( ) ;
831
+ const sampleManifest : dependencyManifestTypes . DependencyManifest = {
832
+ "src/index.py" : {
833
+ id : "src/index.py" ,
834
+ filePath : "src/index.py" ,
835
+ language : "python" ,
836
+ metrics : {
837
+ linesCount : 12 ,
838
+ codeLineCount : 8 ,
839
+ characterCount : 200 ,
840
+ codeCharacterCount : 150 ,
841
+ dependencyCount : 1 ,
842
+ dependentCount : 0 ,
843
+ cyclomaticComplexity : 3 ,
844
+ } ,
845
+ dependencies : {
846
+ "./utils" : {
847
+ id : "./utils" ,
848
+ isExternal : false ,
849
+ symbols : { } ,
850
+ } ,
851
+ } ,
852
+ dependents : { } ,
853
+ symbols : {
854
+ "MyClass" : {
855
+ id : "MyClass" ,
856
+ type : "class" as const ,
857
+ metrics : {
858
+ linesCount : 12 ,
859
+ codeLineCount : 8 ,
860
+ characterCount : 200 ,
861
+ codeCharacterCount : 150 ,
862
+ dependencyCount : 1 ,
863
+ dependentCount : 0 ,
864
+ cyclomaticComplexity : 3 ,
865
+ } ,
866
+ description : "" ,
867
+ dependencies : {
868
+ "./utils.py" : {
869
+ id : "./utils.py" ,
870
+ isExternal : false ,
871
+ symbols : { } ,
872
+ } ,
873
+ } ,
874
+ dependents : { } ,
875
+ } ,
876
+ } ,
877
+ } ,
878
+ } ;
777
879
const createResponse = await manifestService . createManifest (
778
880
userId ,
779
881
project . id ,
780
882
"main" ,
781
883
"abc123" ,
782
884
new Date ( ) ,
783
- {
784
- test : "data" ,
785
- complex : { nested : "value" } ,
786
- } as unknown as dependencyManifestTypes . DependencyManifest ,
885
+ sampleManifest ,
787
886
) ;
788
887
789
888
if ( "error" in createResponse ) {
@@ -817,14 +916,6 @@ Deno.test("get manifest details", async () => {
817
916
assertEquals ( manifest . commitSha , "abc123" ) ;
818
917
assertEquals ( manifest . version , 1 ) ;
819
918
assertEquals ( manifest . manifest . length > 0 , true ) ;
820
-
821
- // get the content of the manifest from the bucket
822
- const manifestContentResponse = await fetch (
823
- manifest . manifest ,
824
- ) ;
825
- const manifestContent = await manifestContentResponse . json ( ) ;
826
- assertEquals ( manifestContent . test , "data" ) ;
827
- assertEquals ( manifestContent . complex . nested , "value" ) ;
828
919
} finally {
829
920
await resetTables ( ) ;
830
921
await destroyKyselyDb ( ) ;
@@ -1162,7 +1253,7 @@ Deno.test("get manifest audit", async () => {
1162
1253
1163
1254
// Create manifest with sample dependency manifest structure
1164
1255
const manifestService = new ManifestService ( ) ;
1165
- const sampleManifest = {
1256
+ const sampleManifest : dependencyManifestTypes . DependencyManifest = {
1166
1257
"src/index.py" : {
1167
1258
id : "src/index.py" ,
1168
1259
filePath : "src/index.py" ,
@@ -1197,7 +1288,7 @@ Deno.test("get manifest audit", async () => {
1197
1288
dependentCount : 0 ,
1198
1289
cyclomaticComplexity : 3 ,
1199
1290
} ,
1200
- description : "MyClass description " ,
1291
+ description : "" ,
1201
1292
dependencies : {
1202
1293
"./utils.py" : {
1203
1294
id : "./utils.py" ,
@@ -1244,18 +1335,18 @@ Deno.test("get manifest audit", async () => {
1244
1335
assertEquals ( typeof auditManifest , "object" ) ;
1245
1336
1246
1337
// Check that it has the expected file entry
1247
- assertEquals ( typeof auditManifest [ "src/index.ts " ] , "object" ) ;
1248
- assertEquals ( auditManifest [ "src/index.ts " ] . id , "src/index.ts " ) ;
1249
- assertEquals ( typeof auditManifest [ "src/index.ts " ] . alerts , "object" ) ;
1250
- assertEquals ( typeof auditManifest [ "src/index.ts " ] . symbols , "object" ) ;
1338
+ assertEquals ( typeof auditManifest [ "src/index.py " ] , "object" ) ;
1339
+ assertEquals ( auditManifest [ "src/index.py " ] . id , "src/index.py " ) ;
1340
+ assertEquals ( typeof auditManifest [ "src/index.py " ] . alerts , "object" ) ;
1341
+ assertEquals ( typeof auditManifest [ "src/index.py " ] . symbols , "object" ) ;
1251
1342
1252
1343
// Check that the symbol is present
1253
1344
assertEquals (
1254
- typeof auditManifest [ "src/index.ts " ] . symbols [ "MyClass" ] ,
1345
+ typeof auditManifest [ "src/index.py " ] . symbols [ "MyClass" ] ,
1255
1346
"object" ,
1256
1347
) ;
1257
1348
assertEquals (
1258
- auditManifest [ "src/index.ts " ] . symbols [ "MyClass" ] . id ,
1349
+ auditManifest [ "src/index.py " ] . symbols [ "MyClass" ] . id ,
1259
1350
"MyClass" ,
1260
1351
) ;
1261
1352
} finally {
0 commit comments