11import assert from "node:assert" ;
2- import type { Mock } from "node:test" ;
3- import { beforeEach , describe , it , mock } from "node:test" ;
4- import * as deployDictionary from "./deploy-dictionary.ts" ;
5- import { fetchAndDeployArtifacts } from "./deploy.ts" ;
6- import * as fetchArtifact from "./fetch-artifact.ts" ;
2+ import { before , beforeEach , describe , it , mock } from "node:test" ;
73
84describe ( "deploy" , ( ) => {
9- const setupMocks = ( {
10- deployDictionaryMock,
11- fetchArtifactMock,
12- } : {
13- deployDictionaryMock : Mock < ( ) => Promise < unknown > > ;
14- fetchArtifactMock : Mock < ( ) => Promise < unknown > > ;
15- } ) => ( {
16- deployDictionaryMock : mock . method (
17- deployDictionary ,
18- "deployDictionary" ,
19- mock . fn ( async ( ) => deployDictionaryMock ) ,
20- ) ,
21- fetchArtifactMock : mock . method (
22- fetchArtifact ,
23- "fetchDictionaryArtifact" ,
24- mock . fn ( async ( ) => fetchArtifactMock ) ,
25- ) ,
26- } ) ;
5+ describe ( "fetchAndDeployArtifacts" , ( ) => {
6+ const deployDictionaryMock = mock . fn < ( ) => Promise < unknown > > ( ) ;
7+ const fetchArtifactMock = mock . fn < ( ) => Promise < unknown > > ( ) ;
8+
9+ const mockDeployDictionary = (
10+ impl : ( ...args : unknown [ ] ) => Promise < unknown > ,
11+ ) => {
12+ deployDictionaryMock . mock . mockImplementation ( impl ) ;
13+ } ;
14+
15+ const mockFetchArtifact = (
16+ impl : ( ...args : unknown [ ] ) => Promise < unknown > ,
17+ ) => {
18+ fetchArtifactMock . mock . mockImplementation ( impl ) ;
19+ } ;
20+
21+ before ( ( ) => {
22+ mock . module ( "./fetch-artifact.ts" , {
23+ namedExports : {
24+ fetchDictionaryArtifact : fetchArtifactMock ,
25+ } ,
26+ } ) ;
2727
28- beforeEach ( ( ) => {
29- // Set required environment variables for tests
30- process . env . ARTIFACT_BUCKET_NAME = "test-bucket" ;
31- process . env . STAGE = "TEST" ;
32- } ) ;
28+ mock . module ( "./deploy-dictionary.ts" , {
29+ namedExports : {
30+ deployDictionary : deployDictionaryMock ,
31+ } ,
32+ } ) ;
33+ } ) ;
34+
35+ beforeEach ( ( ) => {
36+ // Set required environment variables for tests
37+ process . env . ARTIFACT_BUCKET_NAME = "test-bucket" ;
38+ process . env . STAGE = "TEST" ;
39+
40+ deployDictionaryMock . mock . resetCalls ( ) ;
41+ fetchArtifactMock . mock . resetCalls ( ) ;
42+ } ) ;
3343
34- describe ( "fetchAndDeployArtifacts" , ( ) => {
3544 it ( "should fetch and deploy artifacts in parallel" , async ( ) => {
36- const { deployDictionaryMock, fetchArtifactMock } = setupMocks ( {
37- fetchArtifactMock : mock . fn ( async ( ) => [
38- { item_key : "test1" , item_value : "value1" } ,
39- ] ) ,
40- deployDictionaryMock : mock . fn ( async ( ) => { } ) ,
41- } ) ;
45+ const mockKeyValues = [ { item_key : "test1" , item_value : "value1" } ] ;
46+
47+ mockDeployDictionary ( mock . fn ( async ( ) => { } ) ) ;
48+ mockFetchArtifact ( mock . fn ( async ( ) => mockKeyValues ) ) ;
4249
4350 const mockDictionary1 = {
4451 name : "ab-tests-dictionary" ,
@@ -47,6 +54,8 @@ describe("deploy", () => {
4754 name : "mvt-dictionary" ,
4855 } ;
4956
57+ const { fetchAndDeployArtifacts } = await import ( "./deploy.ts" ) ;
58+
5059 await fetchAndDeployArtifacts ( [
5160 {
5261 artifact : "ab-tests.json" ,
@@ -68,15 +77,15 @@ describe("deploy", () => {
6877 it ( "should use correct S3 paths for artifacts" , async ( ) => {
6978 const mockKeyValues = [ { item_key : "test1" , item_value : "value1" } ] ;
7079
71- const { fetchArtifactMock } = setupMocks ( {
72- fetchArtifactMock : mock . fn ( async ( ) => mockKeyValues ) ,
73- deployDictionaryMock : mock . fn ( async ( ) => { } ) ,
74- } ) ;
80+ mockFetchArtifact ( mock . fn ( async ( ) => mockKeyValues ) ) ;
81+ mockDeployDictionary ( mock . fn ( async ( ) => { } ) ) ;
7582
7683 const mockDictionary = {
7784 name : "test-dictionary" ,
7885 } ;
7986
87+ const { fetchAndDeployArtifacts } = await import ( "./deploy.ts" ) ;
88+
8089 await fetchAndDeployArtifacts ( [
8190 {
8291 artifact : "ab-tests.json" ,
@@ -89,17 +98,19 @@ describe("deploy", () => {
8998 } ) ;
9099
91100 it ( "should throw error when artifact fetch fails" , async ( ) => {
92- setupMocks ( {
93- fetchArtifactMock : mock . fn ( async ( ) => {
101+ mockFetchArtifact (
102+ mock . fn ( async ( ) => {
94103 throw new Error ( "S3 fetch failed" ) ;
95104 } ) ,
96- deployDictionaryMock : mock . fn ( async ( ) => { } ) ,
97- } ) ;
105+ ) ;
106+ mockDeployDictionary ( mock . fn ( async ( ) => { } ) ) ;
98107
99108 const mockDictionary = {
100109 name : "test-dictionary" ,
101110 } ;
102111
112+ const { fetchAndDeployArtifacts } = await import ( "./deploy.ts" ) ;
113+
103114 await assert . rejects (
104115 async ( ) => {
105116 await fetchAndDeployArtifacts ( [
@@ -119,17 +130,19 @@ describe("deploy", () => {
119130 it ( "should throw error when deployment fails" , async ( ) => {
120131 const mockKeyValues = [ { item_key : "test1" , item_value : "value1" } ] ;
121132
122- setupMocks ( {
123- fetchArtifactMock : mock . fn ( async ( ) => mockKeyValues ) ,
124- deployDictionaryMock : mock . fn ( async ( ) => {
133+ mockFetchArtifact ( mock . fn ( async ( ) => mockKeyValues ) ) ;
134+ mockDeployDictionary (
135+ mock . fn ( async ( ) => {
125136 throw new Error ( "Deployment failed" ) ;
126137 } ) ,
127- } ) ;
138+ ) ;
128139
129140 const mockDictionary = {
130141 name : "test-dictionary" ,
131142 } ;
132143
144+ const { fetchAndDeployArtifacts } = await import ( "./deploy.ts" ) ;
145+
133146 await assert . rejects (
134147 async ( ) => {
135148 await fetchAndDeployArtifacts ( [
@@ -147,10 +160,10 @@ describe("deploy", () => {
147160 } ) ;
148161
149162 it ( "should handle empty deployments array" , async ( ) => {
150- const { deployDictionaryMock , fetchArtifactMock } = setupMocks ( {
151- fetchArtifactMock : mock . fn ( async ( ) => [ ] ) ,
152- deployDictionaryMock : mock . fn ( async ( ) => { } ) ,
153- } ) ;
163+ mockFetchArtifact ( mock . fn ( async ( ) => [ ] ) ) ;
164+ mockDeployDictionary ( mock . fn ( async ( ) => { } ) ) ;
165+
166+ const { fetchAndDeployArtifacts } = await import ( "./deploy.ts" ) ;
154167
155168 await fetchAndDeployArtifacts ( [ ] ) ;
156169
0 commit comments