Skip to content

Commit e662467

Browse files
authored
fix: remove axios dependency in office addin generator (#10391)
* test: ut * test: ut * test: ut * test: ut
1 parent 387193d commit e662467

File tree

2 files changed

+32
-40
lines changed

2 files changed

+32
-40
lines changed

packages/fx-core/src/component/generator/officeAddin/helperMethods.ts

+18-27
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
/**
55
66
*/
7-
import axios from "axios";
7+
import { ManifestUtil, devPreview } from "@microsoft/teamsfx-api";
88
import fs from "fs";
99
import fse from "fs-extra";
1010
import * as path from "path";
1111
import * as unzip from "unzipper";
12-
import { ManifestUtil, devPreview } from "@microsoft/teamsfx-api";
1312
import { manifestUtils } from "../../driver/teamsApp/utils/ManifestUtils";
1413

1514
const zipFile = "project.zip";
@@ -21,36 +20,28 @@ export class HelperMethods {
2120
projectBranch?: string
2221
): Promise<void> {
2322
const projectTemplateZipFile = `${projectRepo}/archive/${projectBranch || ""}.zip`;
24-
return axios
25-
.get(projectTemplateZipFile, {
26-
responseType: "stream",
27-
})
28-
.then((response) => {
29-
return new Promise<void>((resolve, reject) => {
30-
response.data
31-
.pipe(fs.createWriteStream(`${projectFolder}/${zipFile}`))
32-
.on("error", function (err: unknown) {
33-
reject(
34-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
35-
`Unable to download project zip file for "${projectTemplateZipFile}".\n${err}`
36-
);
37-
})
38-
.on("close", async () => {
39-
await HelperMethods.unzipProjectTemplate(projectFolder);
40-
resolve();
41-
});
42-
});
43-
})
44-
.catch((err) => {
45-
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
46-
console.log(`Unable to download project zip file for "${projectTemplateZipFile}".\n${err}`);
47-
});
23+
const writeFileStream = fs.createWriteStream(path.resolve(projectFolder, zipFile));
24+
const response = await fetch(projectTemplateZipFile, { method: "GET" });
25+
const reader = response.body?.getReader();
26+
if (reader) {
27+
while (true) {
28+
const res = await reader.read();
29+
if (res.value) {
30+
writeFileStream.write(res.value);
31+
}
32+
if (res.done) {
33+
break;
34+
}
35+
}
36+
writeFileStream.close();
37+
await HelperMethods.unzipProjectTemplate(projectFolder);
38+
}
4839
}
4940

5041
static async unzipProjectTemplate(projectFolder: string): Promise<void> {
5142
return new Promise((resolve, reject) => {
5243
// TODO: Verify file exists
53-
const readStream = fs.createReadStream(`${projectFolder}/${zipFile}`);
44+
const readStream = fs.createReadStream(path.resolve(`${projectFolder}/${zipFile}`));
5445
readStream
5546
.pipe(unzip.Extract({ path: projectFolder }))
5647
.on("error", function (err: unknown) {

packages/fx-core/tests/component/generator/officeAddinGenerator.test.ts

+14-13
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import {
1515
Platform,
1616
SystemError,
1717
} from "@microsoft/teamsfx-api";
18-
import axios from "axios";
1918
import * as chai from "chai";
2019
import * as childProcess from "child_process";
2120
import EventEmitter from "events";
@@ -380,27 +379,29 @@ describe("helperMethods", async () => {
380379
}
381380

382381
class MockedWriteStream {
383-
on(event: string, cb: () => void) {
384-
return this;
385-
}
382+
write(data: any) {}
383+
close() {}
386384
}
387385

388386
afterEach(() => {
389387
sandbox.restore();
390388
});
391389

390+
const mockFetch = async (url: any, options: any) => {
391+
// You can customize the response here
392+
const response = new Response("Hello, world!", {
393+
status: 200,
394+
headers: { "Content-Type": "text/plain" },
395+
});
396+
return Promise.resolve(response);
397+
};
398+
392399
it("should download project template zip file", async () => {
393-
const resp = new ResponseData();
394-
sandbox.stub(axios, "get").resolves({ data: resp });
400+
sandbox.stub(global, "fetch").value(mockFetch);
395401
const mockedStream = new MockedWriteStream();
396-
const unzipStub = sandbox.stub(HelperMethods, "unzipProjectTemplate").resolves();
402+
sandbox.stub(HelperMethods, "unzipProjectTemplate").resolves();
397403
sandbox.stub<any, any>(fs, "createWriteStream").returns(mockedStream);
398-
const promise = HelperMethods.downloadProjectTemplateZipFile("", "", "");
399-
// manully wait for the close event to be registered
400-
await new Promise((resolve) => setTimeout(resolve, 500));
401-
resp.emit("close");
402-
await promise;
403-
chai.expect(unzipStub.calledOnce).to.be.true;
404+
await HelperMethods.downloadProjectTemplateZipFile("", "", "");
404405
});
405406
});
406407

0 commit comments

Comments
 (0)