Skip to content

Commit

Permalink
fix: remove axios dependency in office addin generator (#10391)
Browse files Browse the repository at this point in the history
* test: ut

* test: ut

* test: ut

* test: ut
  • Loading branch information
jayzhang authored Nov 17, 2023
1 parent 387193d commit e662467
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@
/**
* @author darrmill@microsoft.com, yefuwang@microsoft.com
*/
import axios from "axios";
import { ManifestUtil, devPreview } from "@microsoft/teamsfx-api";
import fs from "fs";
import fse from "fs-extra";
import * as path from "path";
import * as unzip from "unzipper";
import { ManifestUtil, devPreview } from "@microsoft/teamsfx-api";
import { manifestUtils } from "../../driver/teamsApp/utils/ManifestUtils";

const zipFile = "project.zip";
Expand All @@ -21,36 +20,28 @@ export class HelperMethods {
projectBranch?: string
): Promise<void> {
const projectTemplateZipFile = `${projectRepo}/archive/${projectBranch || ""}.zip`;
return axios
.get(projectTemplateZipFile, {
responseType: "stream",
})
.then((response) => {
return new Promise<void>((resolve, reject) => {
response.data
.pipe(fs.createWriteStream(`${projectFolder}/${zipFile}`))
.on("error", function (err: unknown) {
reject(
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
`Unable to download project zip file for "${projectTemplateZipFile}".\n${err}`
);
})
.on("close", async () => {
await HelperMethods.unzipProjectTemplate(projectFolder);
resolve();
});
});
})
.catch((err) => {
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
console.log(`Unable to download project zip file for "${projectTemplateZipFile}".\n${err}`);
});
const writeFileStream = fs.createWriteStream(path.resolve(projectFolder, zipFile));
const response = await fetch(projectTemplateZipFile, { method: "GET" });
const reader = response.body?.getReader();
if (reader) {
while (true) {
const res = await reader.read();
if (res.value) {
writeFileStream.write(res.value);
}
if (res.done) {
break;
}
}
writeFileStream.close();
await HelperMethods.unzipProjectTemplate(projectFolder);
}
}

static async unzipProjectTemplate(projectFolder: string): Promise<void> {
return new Promise((resolve, reject) => {
// TODO: Verify file exists
const readStream = fs.createReadStream(`${projectFolder}/${zipFile}`);
const readStream = fs.createReadStream(path.resolve(`${projectFolder}/${zipFile}`));
readStream
.pipe(unzip.Extract({ path: projectFolder }))
.on("error", function (err: unknown) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import {
Platform,
SystemError,
} from "@microsoft/teamsfx-api";
import axios from "axios";
import * as chai from "chai";
import * as childProcess from "child_process";
import EventEmitter from "events";
Expand Down Expand Up @@ -380,27 +379,29 @@ describe("helperMethods", async () => {
}

class MockedWriteStream {
on(event: string, cb: () => void) {
return this;
}
write(data: any) {}
close() {}
}

afterEach(() => {
sandbox.restore();
});

const mockFetch = async (url: any, options: any) => {
// You can customize the response here
const response = new Response("Hello, world!", {
status: 200,
headers: { "Content-Type": "text/plain" },
});
return Promise.resolve(response);
};

it("should download project template zip file", async () => {
const resp = new ResponseData();
sandbox.stub(axios, "get").resolves({ data: resp });
sandbox.stub(global, "fetch").value(mockFetch);
const mockedStream = new MockedWriteStream();
const unzipStub = sandbox.stub(HelperMethods, "unzipProjectTemplate").resolves();
sandbox.stub(HelperMethods, "unzipProjectTemplate").resolves();
sandbox.stub<any, any>(fs, "createWriteStream").returns(mockedStream);
const promise = HelperMethods.downloadProjectTemplateZipFile("", "", "");
// manully wait for the close event to be registered
await new Promise((resolve) => setTimeout(resolve, 500));
resp.emit("close");
await promise;
chai.expect(unzipStub.calledOnce).to.be.true;
await HelperMethods.downloadProjectTemplateZipFile("", "", "");
});
});

Expand Down

0 comments on commit e662467

Please sign in to comment.