Tests work again! 🎉

pull/1103/head
Rick Carlino 2019-02-04 19:54:59 -06:00
parent 347285b659
commit 8fd2e71362
27 changed files with 102 additions and 141 deletions

View File

@ -7,10 +7,10 @@ if Rails.env == "development"
ENV['OS_UPDATE_SERVER'] = "http://non_legacy_update_url.com" ENV['OS_UPDATE_SERVER'] = "http://non_legacy_update_url.com"
# CREDIT: Faker Ruby Gem # CREDIT: Faker Ruby Gem
VEGGIES = %w(artichoke arugula asparagus broccoli VEGGIES = %w(artichoke arugula asparagus broccoli
cabbage caper carob carrot cauliflower celery chive cornichon cucumber cabbage caper carrot cauliflower celery chive cornichon cucumber
eggplant endive garlic jicama kale kohlrabi leek lettuce okra onion eggplant endive garlic jicama kale kohlrabi leek lettuce okra onion
parsnip pepper potato pumpkin radicchio radish raspberry rhubarb spinach parsnip pepper potato pumpkin radicchio radish raspberry rhubarb spinach
sprout squash tomato turnip zucchini) squash tomato turnip zucchini)
[ [
Sensor, Sensor,
Peripheral, Peripheral,

View File

@ -1,10 +1,8 @@
jest.mock("axios", () => { jest.mock("axios", () => {
return { return {
default: { get: jest.fn((_url: string) => {
get: jest.fn((_url: string) => { return Promise.reject("Simulated failure");
return Promise.reject("Simulated failure"); })
})
}
}; };
}); });

View File

@ -1,10 +1,8 @@
jest.mock("axios", () => { jest.mock("axios", () => {
return { return {
default: { get: jest.fn((_url: string) => {
get: jest.fn((_url: string) => { return Promise.resolve();
return Promise.resolve(); })
})
}
}; };
}); });
import { generateUrl, getUserLang, generateI18nConfig } from "../i18n"; import { generateUrl, getUserLang, generateI18nConfig } from "../i18n";

View File

@ -1,11 +1,12 @@
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { interceptors: {
interceptors: { response: { use: jest.fn() },
response: { use: jest.fn() }, request: { use: jest.fn() }
request: { use: jest.fn() } },
}, get() {
get() { return Promise.reject("NO"); } return Promise.reject("NO");
} }
})); }));
jest.mock("../session", () => ({ Session: { clear: jest.fn(), } })); jest.mock("../session", () => ({ Session: { clear: jest.fn(), } }));

View File

@ -6,14 +6,12 @@ const mockAuth = (iss = "987"): AuthState => ({
}); });
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { get() {
get() { return Promise.resolve({ data: mockAuth("000") });
return Promise.resolve({ data: mockAuth("000") }); },
}, interceptors: {
interceptors: { response: { use: jest.fn() },
response: { use: jest.fn() }, request: { use: jest.fn() }
request: { use: jest.fn() }
}
} }
})); }));

View File

@ -5,7 +5,7 @@ const mock = {
}; };
jest.mock("axios", jest.mock("axios",
() => ({ default: { post: jest.fn(() => Promise.resolve(mock.response)) } })); () => ({ post: jest.fn(() => Promise.resolve(mock.response)) }));
import { API } from "../../api"; import { API } from "../../api";
import { Content } from "../../constants"; import { Content } from "../../constants";

View File

@ -5,11 +5,9 @@ jest.mock("../maybe_start_tracking", () => {
const mockBody: Partial<TaggedUser["body"]> = { id: 23 }; const mockBody: Partial<TaggedUser["body"]> = { id: 23 };
jest.mock("axios", () => { jest.mock("axios", () => {
return { return {
default: { delete: () => Promise.resolve({}),
delete: () => Promise.resolve({}), post: () => Promise.resolve({ data: mockBody }),
post: () => Promise.resolve({ data: mockBody }), put: () => Promise.resolve({ data: mockBody })
put: () => Promise.resolve({ data: mockBody })
}
}; };
}); });

View File

@ -7,10 +7,8 @@ jest.mock("../../device", () => ({
})); }));
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { get: () => { return Promise.resolve({ data: "" }); },
get: () => { return Promise.resolve({ data: "" }); }, put: () => { return Promise.resolve({ data: "" }); },
put: () => { return Promise.resolve({ data: "" }); },
}
})); }));
import { refresh, updateViaAjax } from "../crud"; import { refresh, updateViaAjax } from "../crud";

View File

@ -1,16 +1,14 @@
let mockPost = Promise.resolve({ data: { id: 1 } }); let mockPost = Promise.resolve({ data: { id: 1 } });
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { get: () => Promise.resolve({
get: () => Promise.resolve({ data: {
data: { "id": 6,
"id": 6, "name": "New Device From Server",
"name": "New Device From Server", "timezone": "America/Chicago",
"timezone": "America/Chicago", "last_saw_api": "2017-08-30T20:42:35.854Z"
"last_saw_api": "2017-08-30T20:42:35.854Z" }
} }),
}), post: () => mockPost,
post: () => mockPost,
}
})); }));
import { refresh, initSaveGetId } from "../crud"; import { refresh, initSaveGetId } from "../crud";

View File

@ -15,9 +15,7 @@ jest.mock("../maybe_start_tracking", () => ({
let mockDelete: Promise<{} | void> = Promise.resolve({}); let mockDelete: Promise<{} | void> = Promise.resolve({});
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { delete: jest.fn(() => mockDelete)
delete: jest.fn(() => mockDelete)
}
})); }));
import { destroy, destroyAll } from "../crud"; import { destroy, destroyAll } from "../crud";

View File

@ -1,12 +1,10 @@
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { interceptors: {
interceptors: { response: { use: jest.fn() },
response: { use: jest.fn() }, request: { use: jest.fn() }
request: { use: jest.fn() } },
}, post: jest.fn(() => { return Promise.resolve({ data: { foo: "bar" } }); }),
post: jest.fn(() => { return Promise.resolve({ data: { foo: "bar" } }); }), get: jest.fn(() => { return Promise.resolve({ data: { foo: "bar" } }); }),
get: jest.fn(() => { return Promise.resolve({ data: { foo: "bar" } }); }),
}
})); }));
jest.mock("../../api/api", () => ({ jest.mock("../../api/api", () => ({

View File

@ -7,13 +7,11 @@ const mockState = {
}; };
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { interceptors: {
interceptors: { response: { use: jest.fn() },
response: { use: jest.fn() }, request: { use: jest.fn() }
request: { use: jest.fn() } },
}, get() { return Promise.resolve({ data: mockState }); }
get() { return Promise.resolve({ data: mockState }); }
}
})); }));
jest.mock("../../session", () => ({ jest.mock("../../session", () => ({

View File

@ -26,9 +26,7 @@ jest.mock("../../device", () => ({
let mockGetRelease: Promise<{}> = Promise.resolve({}); let mockGetRelease: Promise<{}> = Promise.resolve({});
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { get: jest.fn(() => { return mockGetRelease; })
get: jest.fn(() => { return mockGetRelease; })
}
})); }));
import * as actions from "../actions"; import * as actions from "../actions";

View File

@ -1,8 +1,6 @@
let mockReleaseNoteData = {}; let mockReleaseNoteData = {};
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { get: jest.fn(() => { return Promise.resolve(mockReleaseNoteData); })
get: jest.fn(() => { return Promise.resolve(mockReleaseNoteData); })
}
})); }));
import * as React from "react"; import * as React from "react";

View File

@ -4,11 +4,9 @@ jest.mock("../../../device", () => ({ getDevice: () => (mockDevice) }));
jest.mock("axios", () => { jest.mock("axios", () => {
return { return {
default: { post: jest.fn(() => {
post: jest.fn(() => { return Promise.reject("NOPE");
return Promise.reject("NOPE"); })
})
}
}; };
}); });

View File

@ -7,7 +7,7 @@ jest.mock("../../../device", () => ({
})); }));
jest.mock("axios", () => { jest.mock("axios", () => {
return { default: { post: jest.fn(() => ({ data: "FAKE CERT" })) } }; return { post: jest.fn(() => ({ data: "FAKE CERT" })) };
}); });
import { createTransferCert } from "../create_transfer_cert"; import { createTransferCert } from "../create_transfer_cert";

View File

@ -7,7 +7,7 @@ jest.mock("../../../device", () => ({
})); }));
jest.mock("axios", () => { jest.mock("axios", () => {
return { default: { post: jest.fn(() => ({ data: "FAKE CERT" })) } }; return { post: jest.fn(() => ({ data: "FAKE CERT" })) };
}); });
import { transferOwnership } from "../transfer_ownership"; import { transferOwnership } from "../transfer_ownership";

View File

@ -1,7 +1,5 @@
let mockPromise: Promise<{} | void> = Promise.resolve(); let mockPromise: Promise<{} | void> = Promise.resolve();
jest.mock("axios", () => ({ jest.mock("axios", () => ({ get: () => mockPromise }));
default: { get: () => mockPromise }
}));
import { executableType, OFSearch } from "../util"; import { executableType, OFSearch } from "../util";
import { Actions } from "../../constants"; import { Actions } from "../../constants";

View File

@ -1,8 +1,6 @@
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { post: jest.fn(() => Promise.resolve()),
post: jest.fn(() => Promise.resolve()), patch: jest.fn(() => Promise.resolve()),
patch: jest.fn(() => Promise.resolve()),
}
})); }));
jest.mock("../../../history", () => ({ history: { push: jest.fn() } })); jest.mock("../../../history", () => ({ history: { push: jest.fn() } }));

View File

@ -1,15 +1,13 @@
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { get: jest.fn(() => {
get: jest.fn(() => { return Promise.resolve({
return Promise.resolve({ data: [
data: [ { manifest: "url", name: "farmware0" },
{ manifest: "url", name: "farmware0" }, { manifest: "url", name: "farmware1" }
{ manifest: "url", name: "farmware1" } ]
] });
}); }),
}), post: jest.fn(() => Promise.resolve()),
post: jest.fn(() => Promise.resolve()),
}
})); }));
import { getFirstPartyFarmwareList, retryFetchPackageName } from "../actions"; import { getFirstPartyFarmwareList, retryFetchPackageName } from "../actions";

View File

@ -11,10 +11,8 @@ jest.mock("../../../device", () => {
let mockData = [{ id: 1 }, { id: 2 }, { id: 3 }]; let mockData = [{ id: 1 }, { id: 2 }, { id: 3 }];
let mockDelete = Promise.resolve(); let mockDelete = Promise.resolve();
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { post: jest.fn(() => Promise.resolve({ data: mockData })),
post: jest.fn(() => Promise.resolve({ data: mockData })), delete: jest.fn(() => mockDelete),
delete: jest.fn(() => mockDelete),
}
})); }));
const mockInc = jest.fn(); const mockInc = jest.fn();

View File

@ -1,8 +1,7 @@
let mockAxiosResponse = Promise.resolve({ data: "" }); let mockAxiosResponse = Promise.resolve({ data: "" });
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { post: jest.fn(() => mockAxiosResponse)
post: jest.fn(() => mockAxiosResponse)
}
})); }));
jest.mock("../../session", () => ({ jest.mock("../../session", () => ({
@ -29,7 +28,7 @@ jest.mock("../../api", () => ({
import * as React from "react"; import * as React from "react";
import { mount, shallow } from "enzyme"; import { mount, shallow } from "enzyme";
import { FrontPage, setField, PartialFormEvent } from "../front_page"; import { FrontPage, setField, PartialFormEvent } from "../front_page";
import axios from "axios"; import * as axios from "axios";
import { API } from "../../api"; import { API } from "../../api";
import { Session } from "../../session"; import { Session } from "../../session";
import { success, error } from "farmbot-toastr"; import { success, error } from "farmbot-toastr";
@ -62,7 +61,7 @@ describe("<FrontPage />", () => {
el.setState({ email: "foo@bar.io", loginPassword: "password" }); el.setState({ email: "foo@bar.io", loginPassword: "password" });
await el.instance().submitLogin(fakeEvent as FormEvent); await el.instance().submitLogin(fakeEvent as FormEvent);
expect(API.setBaseUrl).toHaveBeenCalled(); expect(API.setBaseUrl).toHaveBeenCalled();
expect(axios.post).toHaveBeenCalledWith( expect(axios.default.post).toHaveBeenCalledWith(
"://localhost:3000/api/tokens/", "://localhost:3000/api/tokens/",
{ user: { email: "foo@bar.io", password: "password" } }); { user: { email: "foo@bar.io", password: "password" } });
expect(Session.replaceToken).toHaveBeenCalledWith("new data"); expect(Session.replaceToken).toHaveBeenCalledWith("new data");
@ -74,7 +73,7 @@ describe("<FrontPage />", () => {
el.setState({ email: "foo@bar.io", loginPassword: "password" }); el.setState({ email: "foo@bar.io", loginPassword: "password" });
await el.instance().submitLogin(fakeEvent as FormEvent); await el.instance().submitLogin(fakeEvent as FormEvent);
expect(API.setBaseUrl).toHaveBeenCalled(); expect(API.setBaseUrl).toHaveBeenCalled();
expect(axios.post).toHaveBeenCalledWith( expect(axios.default.post).toHaveBeenCalledWith(
"://localhost:3000/api/tokens/", "://localhost:3000/api/tokens/",
{ user: { email: "foo@bar.io", password: "password" } }); { user: { email: "foo@bar.io", password: "password" } });
expect(Session.replaceToken).not.toHaveBeenCalled(); expect(Session.replaceToken).not.toHaveBeenCalled();
@ -89,7 +88,7 @@ describe("<FrontPage />", () => {
el.setState({ email: "foo@bar.io", loginPassword: "password" }); el.setState({ email: "foo@bar.io", loginPassword: "password" });
await el.instance().submitLogin(fakeEvent as FormEvent); await el.instance().submitLogin(fakeEvent as FormEvent);
expect(API.setBaseUrl).toHaveBeenCalled(); expect(API.setBaseUrl).toHaveBeenCalled();
expect(axios.post).toHaveBeenCalledWith( expect(axios.default.post).toHaveBeenCalledWith(
"://localhost:3000/api/tokens/", "://localhost:3000/api/tokens/",
{ user: { email: "foo@bar.io", password: "password" } }); { user: { email: "foo@bar.io", password: "password" } });
await expect(Session.replaceToken).not.toHaveBeenCalled(); await expect(Session.replaceToken).not.toHaveBeenCalled();
@ -107,7 +106,7 @@ describe("<FrontPage />", () => {
agreeToTerms: true agreeToTerms: true
}); });
await el.instance().submitRegistration(fakeEvent as FormEvent); await el.instance().submitRegistration(fakeEvent as FormEvent);
expect(axios.post).toHaveBeenCalledWith("usersPath", { expect(axios.default.post).toHaveBeenCalledWith("usersPath", {
user: { user: {
agree_to_terms: true, email: "foo@bar.io", name: "Foo Bar", agree_to_terms: true, email: "foo@bar.io", name: "Foo Bar",
password: "password", password_confirmation: "password" password: "password", password_confirmation: "password"
@ -129,7 +128,7 @@ describe("<FrontPage />", () => {
agreeToTerms: true agreeToTerms: true
}); });
await el.instance().submitRegistration(fakeEvent as FormEvent); await el.instance().submitRegistration(fakeEvent as FormEvent);
await expect(axios.post).toHaveBeenCalledWith("usersPath", { await expect(axios.default.post).toHaveBeenCalledWith("usersPath", {
user: { user: {
agree_to_terms: true, email: "foo@bar.io", name: "Foo Bar", agree_to_terms: true, email: "foo@bar.io", name: "Foo Bar",
password: "password", password_confirmation: "password" password: "password", password_confirmation: "password"
@ -142,11 +141,12 @@ describe("<FrontPage />", () => {
it("submits forgot password: success", async () => { it("submits forgot password: success", async () => {
mockAxiosResponse = Promise.resolve({ data: "" }); mockAxiosResponse = Promise.resolve({ data: "" });
debugger;
const el = mount<FrontPage>(<FrontPage />); const el = mount<FrontPage>(<FrontPage />);
el.setState({ email: "foo@bar.io", activePanel: "forgotPassword" }); el.setState({ email: "foo@bar.io", activePanel: "forgotPassword" });
await el.instance().submitForgotPassword( await el.instance().submitForgotPassword(
fakeEvent as React.FormEvent<HTMLFormElement>); fakeEvent as React.FormEvent<HTMLFormElement>);
await expect(axios.post).toHaveBeenCalledWith("resetPath", await expect(axios.default.post).toHaveBeenCalledWith("resetPath",
{ email: "foo@bar.io" }); { email: "foo@bar.io" });
await expect(success).toHaveBeenCalledWith( await expect(success).toHaveBeenCalledWith(
"Email has been sent.", "Forgot Password"); "Email has been sent.", "Forgot Password");
@ -159,7 +159,7 @@ describe("<FrontPage />", () => {
el.setState({ email: "foo@bar.io", activePanel: "forgotPassword" }); el.setState({ email: "foo@bar.io", activePanel: "forgotPassword" });
await el.instance().submitForgotPassword( await el.instance().submitForgotPassword(
fakeEvent as React.FormEvent<HTMLFormElement>); fakeEvent as React.FormEvent<HTMLFormElement>);
await expect(axios.post).toHaveBeenCalledWith("resetPath", await expect(axios.default.post).toHaveBeenCalledWith("resetPath",
{ email: "foo@bar.io" }); { email: "foo@bar.io" });
await expect(error).toHaveBeenCalledWith( await expect(error).toHaveBeenCalledWith(
expect.stringContaining("failure")); expect.stringContaining("failure"));
@ -172,7 +172,7 @@ describe("<FrontPage />", () => {
el.setState({ email: "foo@bar.io", activePanel: "forgotPassword" }); el.setState({ email: "foo@bar.io", activePanel: "forgotPassword" });
await el.instance().submitForgotPassword( await el.instance().submitForgotPassword(
fakeEvent as React.FormEvent<HTMLFormElement>); fakeEvent as React.FormEvent<HTMLFormElement>);
await expect(axios.post).toHaveBeenCalledWith("resetPath", await expect(axios.default.post).toHaveBeenCalledWith("resetPath",
{ email: "foo@bar.io" }); { email: "foo@bar.io" });
await expect(error).toHaveBeenCalledWith(expect.stringContaining( await expect(error).toHaveBeenCalledWith(expect.stringContaining(
"not associated with an account")); "not associated with an account"));

View File

@ -1,9 +1,7 @@
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { post: () => Promise.reject({
post: () => Promise.reject({ err: "hi"
err: "hi" })
})
}
})); }));
import { mount } from "enzyme"; import { mount } from "enzyme";

View File

@ -1,9 +1,7 @@
jest.mock("axios", () => ({ jest.mock("axios", () => ({
default: { post: () => Promise.resolve({
post: () => Promise.resolve({ data: "whatever"
data: "whatever" })
})
}
})); }));
import { mount } from "enzyme"; import { mount } from "enzyme";

View File

@ -1,20 +1,18 @@
jest.mock("axios", function () { jest.mock("axios", function () {
return { return {
default: { get: function () {
get: function () { return Promise.resolve({
return Promise.resolve({ data: {
id: 0,
data: { data: {
id: 0, attributes: {
data: { svg_icon: "<svg>Wow</svg>",
attributes: { slug: "lettuce"
svg_icon: "<svg>Wow</svg>",
slug: "lettuce"
}
} }
} }
}); }
} });
} }
}; };
}); });

View File

@ -1,7 +1,7 @@
const mockGet = jest.fn(() => { const mockGet = jest.fn(() => {
return Promise.resolve({ data: [mockLog.body] }); return Promise.resolve({ data: [mockLog.body] });
}); });
jest.mock("axios", () => ({ default: { get: mockGet } })); jest.mock("axios", () => ({ get: mockGet }));
import { refreshLogs } from "../refresh_logs"; import { refreshLogs } from "../refresh_logs";
import axios from "axios"; import axios from "axios";
import { API } from "../../api"; import { API } from "../../api";

View File

@ -6,13 +6,11 @@ jest.mock("../../i18n", () => {
jest.mock("axios", () => { jest.mock("axios", () => {
return { return {
default: { post: jest.fn(() => {
post: jest.fn(() => { return Promise.resolve({
return Promise.resolve({ data: { token: { unencoded: {}, encoded: "========" } }
data: { token: { unencoded: {}, encoded: "========" } } });
}); })
})
}
}; };
}); });