|
@@ -1,300 +0,0 @@
|
|
-import extensionStrategy, {
|
|
|
|
- hasExtensionInstalled,
|
|
|
|
- hasChromeExtensionInstalled,
|
|
|
|
- hasFirefoxExtensionInstalled,
|
|
|
|
- cancelRunningExtensionRequest,
|
|
|
|
-} from "../ExtensionStrategy"
|
|
|
|
-
|
|
|
|
-jest.mock("../../utils/b64", () => ({
|
|
|
|
- __esModule: true,
|
|
|
|
- decodeB64StringToArrayBuffer: jest.fn((data) => `${data}-converted`),
|
|
|
|
-}))
|
|
|
|
-
|
|
|
|
-jest.mock("~/newstore/settings", () => {
|
|
|
|
- return {
|
|
|
|
- __esModule: true,
|
|
|
|
- settingsStore: {
|
|
|
|
- value: {
|
|
|
|
- EXTENSIONS_ENABLED: true,
|
|
|
|
- PROXY_ENABLED: true,
|
|
|
|
- PROXY_URL: "test",
|
|
|
|
- },
|
|
|
|
- },
|
|
|
|
- }
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
-describe("hasExtensionInstalled", () => {
|
|
|
|
- test("returns true if extension is present and hooked", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {}
|
|
|
|
-
|
|
|
|
- expect(hasExtensionInstalled()).toEqual(true)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension not present or not hooked", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = undefined
|
|
|
|
-
|
|
|
|
- expect(hasExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
-describe("hasChromeExtensionInstalled", () => {
|
|
|
|
- test("returns true if extension is hooked and browser is chrome", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {}
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Chrome")
|
|
|
|
- jest.spyOn(navigator, "vendor", "get").mockReturnValue("Google")
|
|
|
|
-
|
|
|
|
- expect(hasChromeExtensionInstalled()).toEqual(true)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension is hooked and browser is not chrome", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {}
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Firefox")
|
|
|
|
- jest.spyOn(navigator, "vendor", "get").mockReturnValue("Google")
|
|
|
|
-
|
|
|
|
- expect(hasChromeExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension not installed and browser is chrome", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = undefined
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Chrome")
|
|
|
|
- jest.spyOn(navigator, "vendor", "get").mockReturnValue("Google")
|
|
|
|
-
|
|
|
|
- expect(hasChromeExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension not installed and browser is not chrome", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = undefined
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Firefox")
|
|
|
|
- jest.spyOn(navigator, "vendor", "get").mockReturnValue("Google")
|
|
|
|
-
|
|
|
|
- expect(hasChromeExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
-describe("hasFirefoxExtensionInstalled", () => {
|
|
|
|
- test("returns true if extension is hooked and browser is firefox", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {}
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Firefox")
|
|
|
|
-
|
|
|
|
- expect(hasFirefoxExtensionInstalled()).toEqual(true)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension is hooked and browser is not firefox", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {}
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Chrome")
|
|
|
|
-
|
|
|
|
- expect(hasFirefoxExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension not installed and browser is firefox", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = undefined
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Firefox")
|
|
|
|
-
|
|
|
|
- expect(hasFirefoxExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("returns false if extension not installed and browser is not firefox", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = undefined
|
|
|
|
- jest.spyOn(navigator, "userAgent", "get").mockReturnValue("Chrome")
|
|
|
|
-
|
|
|
|
- expect(hasFirefoxExtensionInstalled()).toEqual(false)
|
|
|
|
- })
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
-describe("cancelRunningExtensionRequest", () => {
|
|
|
|
- const cancelFunc = jest.fn()
|
|
|
|
-
|
|
|
|
- beforeEach(() => {
|
|
|
|
- cancelFunc.mockClear()
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("cancels request if extension installed and function present in hook", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- cancelRunningRequest: cancelFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- cancelRunningExtensionRequest()
|
|
|
|
- expect(cancelFunc).toHaveBeenCalledTimes(1)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("does not cancel request if extension not installed", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = undefined
|
|
|
|
-
|
|
|
|
- cancelRunningExtensionRequest()
|
|
|
|
- expect(cancelFunc).not.toHaveBeenCalled()
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("does not cancel request if extension installed but function not present", () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {}
|
|
|
|
-
|
|
|
|
- cancelRunningExtensionRequest()
|
|
|
|
- expect(cancelFunc).not.toHaveBeenCalled()
|
|
|
|
- })
|
|
|
|
-})
|
|
|
|
-
|
|
|
|
-describe("extensionStrategy", () => {
|
|
|
|
- const sendReqFunc = jest.fn()
|
|
|
|
-
|
|
|
|
- beforeEach(() => {
|
|
|
|
- sendReqFunc.mockClear()
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- describe("Proxy Requests", () => {
|
|
|
|
- test("asks extension to send request", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockResolvedValue({
|
|
|
|
- data: '{"success":true,"data":""}',
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await extensionStrategy({})
|
|
|
|
-
|
|
|
|
- expect(sendReqFunc).toHaveBeenCalledTimes(1)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("sends POST request to proxy if proxy is enabled", async () => {
|
|
|
|
- let passedUrl
|
|
|
|
- let passedMethod
|
|
|
|
-
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockImplementation(({ method, url }) => {
|
|
|
|
- passedUrl = url
|
|
|
|
- passedMethod = method
|
|
|
|
-
|
|
|
|
- return Promise.resolve({
|
|
|
|
- data: '{"success":true,"data":""}',
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await extensionStrategy({})
|
|
|
|
-
|
|
|
|
- expect(passedUrl).toEqual("test")
|
|
|
|
- expect(passedMethod).toEqual("post")
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("passes request fields properly", async () => {
|
|
|
|
- const reqFields = {
|
|
|
|
- testA: "testA",
|
|
|
|
- testB: "testB",
|
|
|
|
- testC: "testC",
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- let passedFields
|
|
|
|
-
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockImplementation(({ data }) => {
|
|
|
|
- passedFields = data
|
|
|
|
-
|
|
|
|
- return Promise.resolve({
|
|
|
|
- data: '{"success":true,"data":""}',
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await extensionStrategy(reqFields)
|
|
|
|
-
|
|
|
|
- expect(passedFields).toMatchObject(reqFields)
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("passes wantsBinary field", async () => {
|
|
|
|
- let passedFields
|
|
|
|
-
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockImplementation(({ data }) => {
|
|
|
|
- passedFields = data
|
|
|
|
-
|
|
|
|
- return Promise.resolve({
|
|
|
|
- data: '{"success":true,"data":""}',
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await extensionStrategy({})
|
|
|
|
-
|
|
|
|
- expect(passedFields).toHaveProperty("wantsBinary")
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("checks for proxy response success field and throws error message for non-success", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockResolvedValue({
|
|
|
|
- data: '{"success":false,"data": { "message": "testerr" } }',
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await expect(extensionStrategy({})).rejects.toThrow("testerr")
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("checks for proxy response success field and throws error 'Proxy Error' for non-success", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockResolvedValue({
|
|
|
|
- data: '{"success":false,"data": {} }',
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await expect(extensionStrategy({})).rejects.toThrow("Proxy Error")
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("checks for proxy response success and doesn't throw for success", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockResolvedValue({
|
|
|
|
- data: '{"success":true,"data": {} }',
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await expect(extensionStrategy({})).resolves.toBeDefined()
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("checks isBinary response field and resolve with the converted value if so", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockResolvedValue({
|
|
|
|
- data: '{"success": true, "isBinary": true, "data": "testdata" }',
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await expect(extensionStrategy({})).resolves.toMatchObject({
|
|
|
|
- data: "testdata-converted",
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("checks isBinary response field and resolve with the actual value if not so", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockResolvedValue({
|
|
|
|
- data: '{"success": true, "isBinary": false, "data": "testdata" }',
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- await expect(extensionStrategy({})).resolves.toMatchObject({
|
|
|
|
- data: "testdata",
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
- test("failed request errors are thrown as-is", async () => {
|
|
|
|
- global.__POSTWOMAN_EXTENSION_HOOK__ = {
|
|
|
|
- sendRequest: sendReqFunc,
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- sendReqFunc.mockRejectedValue("err")
|
|
|
|
-
|
|
|
|
- await expect(extensionStrategy({})).rejects.toBe("err")
|
|
|
|
- })
|
|
|
|
- })
|
|
|
|
-})
|
|
|