Skip to content

Commit

Permalink
Update test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
DordeDimitrijev committed Nov 25, 2024
1 parent b9a7352 commit b89d036
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 31 deletions.
6 changes: 3 additions & 3 deletions src/script/acquisition-sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ export class AcquisitionManager {

// Used for Tests
public static get apiCallsDisabled(): boolean {
return this._apiCallsDisabled;
return AcquisitionManager._apiCallsDisabled;
}

private handleRequestFailure(statusCode: number) {
Expand Down Expand Up @@ -169,7 +169,7 @@ export class AcquisitionManager {
public reportStatusDeploy(deployedPackage?: Package, status?: string, previousLabelOrAppVersion?: string, previousDeploymentKey?: string, callback?: Callback<void>): void {
if (AcquisitionManager._apiCallsDisabled) {
console.log(`[CodePush] Api calls are disabled, skipping API call`);
callback(null, null)
callback(/*error*/ null, /*not used*/ null);
return;
}

Expand Down Expand Up @@ -236,7 +236,7 @@ export class AcquisitionManager {
public reportStatusDownload(downloadedPackage: Package, callback?: Callback<void>): void {
if (AcquisitionManager._apiCallsDisabled) {
console.log(`[CodePush] Api calls are disabled, skipping API call`);
callback(null, null)
callback(/*error*/ null, /*not used*/ null);
return;
}

Expand Down
26 changes: 19 additions & 7 deletions src/test/acquisition-rest-mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,31 @@ var reportStatusDeployUrl = serverUrl + publicPrefixUrl + "/report_status/deploy
var reportStatusDownloadUrl = serverUrl + publicPrefixUrl + "/report_status/download";
var updateCheckUrl = serverUrl + publicPrefixUrl + "/update_check?";

export function updateMockUrl() {
reportStatusDeployUrl = serverUrl + publicPrefixUrl + "/report_status/deploy";
reportStatusDownloadUrl = serverUrl + publicPrefixUrl + "/report_status/download";
updateCheckUrl = serverUrl + publicPrefixUrl + "/update_check?";
}


export class HttpRequester implements acquisitionSdk.Http.Requester {
private expectedStatusCode: number;

constructor(expectedStatusCode?: number) {
this.expectedStatusCode = expectedStatusCode;
}
public request(verb: acquisitionSdk.Http.Verb, url: string, requestBodyOrCallback: string | acquisitionSdk.Callback<acquisitionSdk.Http.Response>, callback?: acquisitionSdk.Callback<acquisitionSdk.Http.Response>): void {
if (!callback && typeof requestBodyOrCallback === "function") {
callback = <acquisitionSdk.Callback<acquisitionSdk.Http.Response>>requestBodyOrCallback;
}

if (verb === acquisitionSdk.Http.Verb.GET && url.indexOf(updateCheckUrl) === 0) {
var params = querystring.parse(url.substring(updateCheckUrl.length));
Server.onUpdateCheck(params, callback);
Server.onUpdateCheck(params, callback,this.expectedStatusCode);
} else if (verb === acquisitionSdk.Http.Verb.POST && url === reportStatusDeployUrl) {
Server.onReportStatus(callback);
Server.onReportStatus(callback,this.expectedStatusCode);
} else if (verb === acquisitionSdk.Http.Verb.POST && url === reportStatusDownloadUrl) {
Server.onReportStatus(callback);
Server.onReportStatus(callback,this.expectedStatusCode);
} else {
throw new Error("Unexpected call");
}
Expand Down Expand Up @@ -73,7 +85,7 @@ class Server {
}
}

public static onUpdateCheck(params: any, callback: acquisitionSdk.Callback<acquisitionSdk.Http.Response>): void {
public static onUpdateCheck(params: any, callback: acquisitionSdk.Callback<acquisitionSdk.Http.Response>, expectedStatusCode?: number): void {
var updateRequest: types.UpdateCheckRequest = {
deployment_key: params.deployment_key,
app_version: params.app_version,
Expand All @@ -97,13 +109,13 @@ class Server {
}

callback(/*error=*/ null, {
statusCode: 200,
statusCode: expectedStatusCode ? expectedStatusCode : 200,
body: JSON.stringify({ update_info: updateInfo })
});
}
}

public static onReportStatus(callback: acquisitionSdk.Callback<acquisitionSdk.Http.Response>): void {
callback(/*error*/ null, /*response*/ { statusCode: 200 });
public static onReportStatus(callback: acquisitionSdk.Callback<acquisitionSdk.Http.Response>, expectedStatusCode: number): void {
callback(/*error*/ null, /*response*/ { statusCode: expectedStatusCode ? expectedStatusCode : 200 });
}
}
59 changes: 38 additions & 21 deletions src/test/acquisition-sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import * as acquisitionSdk from "../script/acquisition-sdk";
import * as acquisitionRestMock from "./acquisition-rest-mock";
import * as types from "../script/types";
import { CodePushPackageError } from "../script/code-push-error"
import { updateMockUrl } from "./acquisition-rest-mock";

const mockApi = acquisitionRestMock;
var latestPackage: types.UpdateCheckResponse = clone(mockApi.latestPackage);
Expand Down Expand Up @@ -44,6 +45,8 @@ var nativeUpdateResult: acquisitionSdk.NativeUpdateNotification = {
describe("Acquisition SDK", () => {
beforeEach(() => {
mockApi.latestPackage = clone(latestPackage);
mockApi.serverUrl = "http://myurl.com";
updateMockUrl();
});

it("Package with lower label and different package hash gives update", (done: Mocha.Done) => {
Expand Down Expand Up @@ -226,50 +229,64 @@ describe("Acquisition SDK", () => {
done();
}));
});
it("disables api calls on unsuccessful response", (done: Mocha.Done): void => {
var invalidJsonResponse: acquisitionSdk.Http.Response = {
statusCode: 404,
body: "Not found"
};

it("doesnt disable api calls on successful response", (done: Mocha.Done): void => {
var acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.HttpRequester(), configuration);
mockApi.serverUrl = "https://codepush.appcenter.ms";
updateMockUrl();
configuration = { ...configuration, serverUrl: "https://codepush.appcenter.ms" };

var acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.CustomResponseHttpRequester(invalidJsonResponse), configuration);
acquisition.queryUpdateWithCurrentPackage(templateCurrentPackage, (error: Error, returnPackage: acquisitionSdk.RemotePackage | acquisitionSdk.NativeUpdateNotification) => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, false);
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, true);
(acquisitionSdk.AcquisitionManager as any)._apiCallsDisabled = false;
});

acquisition.queryUpdateWithCurrentPackage(templateCurrentPackage, (error: Error, returnPackage: acquisitionSdk.RemotePackage | acquisitionSdk.NativeUpdateNotification) => {
assert.notStrictEqual(returnPackage, null)
assert.strictEqual(returnPackage, null);
acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.HttpRequester(404), configuration);
(acquisitionSdk.AcquisitionManager as any)._apiCallsDisabled = false;

});

acquisition.reportStatusDeploy(templateCurrentPackage, acquisitionSdk.AcquisitionStatus.DeploymentSucceeded, "1.5.0", mockApi.validDeploymentKey, ((error: Error, parameter: void): void => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, false);
}))
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, true);
acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.HttpRequester(404), configuration);
(acquisitionSdk.AcquisitionManager as any)._apiCallsDisabled = false;
}));

acquisition.reportStatusDownload(templateCurrentPackage, ((error: Error, parameter: void): void => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, false);
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, true);
acquisition = acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.CustomResponseHttpRequester(invalidJsonResponse), configuration);
(acquisitionSdk.AcquisitionManager as any)._apiCallsDisabled = false;
}));

done();
})
it("doesn't disable api calls on successful response", (done: Mocha.Done): void => {
var acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.HttpRequester(), configuration);
mockApi.serverUrl = "https://codepush.appcenter.ms";
updateMockUrl();

it("disables api calls on unsuccessful response", (done: Mocha.Done): void => {
var invalidJsonResponse: acquisitionSdk.Http.Response = {
statusCode: 404,
body: "Not found"
};
configuration = { ...configuration, serverUrl: "https://codepush.appcenter.ms" }
var acquisition = new acquisitionSdk.AcquisitionManager(new mockApi.CustomResponseHttpRequester(invalidJsonResponse), configuration);
acquisition.queryUpdateWithCurrentPackage(templateCurrentPackage, (error: Error, returnPackage: acquisitionSdk.RemotePackage | acquisitionSdk.NativeUpdateNotification) => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, false);
});

acquisition.queryUpdateWithCurrentPackage(templateCurrentPackage, (error: Error, returnPackage: acquisitionSdk.RemotePackage | acquisitionSdk.NativeUpdateNotification) => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, true);
assert.notStrictEqual(returnPackage, null);
});

acquisition.reportStatusDeploy(templateCurrentPackage, acquisitionSdk.AcquisitionStatus.DeploymentSucceeded, "1.5.0", mockApi.validDeploymentKey, ((error: Error, parameter: void): void => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, true);
}))
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, false);
}));

acquisition.reportStatusDownload(templateCurrentPackage, ((error: Error, parameter: void): void => {
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, true);
assert.strictEqual(acquisitionSdk.AcquisitionManager.apiCallsDisabled, false);
}));

acquisition.queryUpdateWithCurrentPackage(templateCurrentPackage, (error: Error, returnPackage: acquisitionSdk.RemotePackage | acquisitionSdk.NativeUpdateNotification) => {
assert.strictEqual(returnPackage, null);
})
done();
})

Expand Down

0 comments on commit b89d036

Please sign in to comment.