saleor-dashboard/src/new-apps/components/AppListPage/utils.test.ts

359 lines
10 KiB
TypeScript
Raw Normal View History

import {
AppListItemFragment,
AppTypeEnum,
PermissionEnum,
} from "@dashboard/graphql";
import {
appsInProgress,
comingSoonApp,
installedAppsList,
releasedApp,
} from "@dashboard/new-apps/fixtures";
import { AppListPageSections } from "./types";
import {
getVerifiedInstallableMarketplaceApps,
getVerifiedInstalledApps,
resolveSectionsAvailability,
} from "./utils";
describe("App List available sections util", () => {
it("should return available app list sections when all data are passed", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: appsInProgress,
installedApps: installedAppsList,
installableMarketplaceApps: [releasedApp],
comingSoonMarketplaceApps: [comingSoonApp],
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: true,
all: true,
comingSoon: true,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
it("should return no available app list sections when no data are passed", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: [],
installedApps: [],
installableMarketplaceApps: [],
comingSoonMarketplaceApps: [],
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: false,
all: false,
comingSoon: false,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
it("should return only installed apps section as available when only installed apps are passed", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: [],
installedApps: installedAppsList,
installableMarketplaceApps: [],
comingSoonMarketplaceApps: [],
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: true,
all: false,
comingSoon: false,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
it("should return only installed apps section as available when only installations are passed", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: appsInProgress,
installedApps: [],
installableMarketplaceApps: [],
comingSoonMarketplaceApps: [],
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: true,
all: false,
comingSoon: false,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
it("should return available app list sections when all data are undefined", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: undefined,
installedApps: undefined,
installableMarketplaceApps: undefined,
comingSoonMarketplaceApps: undefined,
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: true,
all: true,
comingSoon: true,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
it("should return installed apps section as available when installed apps passed and installations is undefined", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: undefined,
installedApps: installedAppsList,
installableMarketplaceApps: [],
comingSoonMarketplaceApps: [],
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: true,
all: false,
comingSoon: false,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
it("should return installed apps section as available when installed apps is undefined and installations are passed", () => {
// Arrange
const appSectionsData: AppListPageSections = {
appsInstallations: appsInProgress,
installedApps: undefined,
installableMarketplaceApps: [],
comingSoonMarketplaceApps: [],
};
// Act
const sectionsAvailability = resolveSectionsAvailability(appSectionsData);
// Assert
const expectedSectionsAvailability = {
installed: true,
all: false,
comingSoon: false,
};
expect(sectionsAvailability).toEqual(expectedSectionsAvailability);
});
});
describe("App List verified installed apps util", () => {
it("should return installed apps list labeled as external properly when some of them are external", () => {
// Arrange
const installedApps: AppListItemFragment[] = [
{
__typename: "App",
id: "QXBjPgE3Ng==",
isActive: true,
name: "app external",
type: AppTypeEnum.THIRDPARTY,
version: "1.0.0",
appUrl: null,
manifestUrl: "https://www.example.com/manifest",
permissions: [
{
__typename: "Permission",
code: PermissionEnum.MANAGE_USERS,
name: "Manage customers.",
},
],
},
{
__typename: "App",
id: "QXBwOjE3Ng==",
isActive: false,
name: "app local",
type: AppTypeEnum.THIRDPARTY,
version: "1.0.0",
appUrl: "http://localhost:3000",
manifestUrl: "http://localhost:3000/api/manifest",
permissions: [
{
__typename: "Permission",
code: PermissionEnum.MANAGE_ORDERS,
name: "Manage orders.",
},
{
__typename: "Permission",
code: PermissionEnum.MANAGE_USERS,
name: "Manage customers.",
},
],
},
];
const installableMarketplaceApps = [
{
name: {
en: "Test app",
},
description: {
en: "Test app description",
},
logo: {
source: "https://www.example.com/logo",
color: "#000000",
},
integrations: [],
manifestUrl: "https://www.example.com/manifest",
privacyUrl: "https://www.example.com/privacy",
supportUrl: "https://www.example.com/support",
repositoryUrl: "https://www.example.com/repository",
vercelDeploymentUrl: "https://www.example.com/deployment",
},
];
// Act
const verifiedInstalledApps = getVerifiedInstalledApps(
installedApps,
installableMarketplaceApps,
);
// Assert
const expectedVerifiedInstalledApps = [
{
app: installedApps[0],
isExternal: false,
logo: {
source: "https://www.example.com/logo",
color: "#000000",
},
},
{
app: installedApps[1],
isExternal: true,
logo: undefined,
},
];
expect(verifiedInstalledApps).toEqual(expectedVerifiedInstalledApps);
});
});
describe("App List verified installable marketplace apps util", () => {
it("should return filtered installable marketplace apps list when some of them are already installed", () => {
// Arrange
const installedApps: AppListItemFragment[] = [
{
__typename: "App",
id: "QXBjPgE3Ng==",
isActive: true,
name: "app external",
type: AppTypeEnum.THIRDPARTY,
version: "1.0.0",
appUrl: null,
manifestUrl: "https://www.example.com/manifest",
permissions: [
{
__typename: "Permission",
code: PermissionEnum.MANAGE_USERS,
name: "Manage customers.",
},
],
},
{
__typename: "App",
id: "QXBwOjE3Ng==",
isActive: false,
name: "app local",
type: AppTypeEnum.THIRDPARTY,
version: "1.0.0",
appUrl: "http://localhost:3000",
manifestUrl: "http://localhost:3000/api/manifest",
permissions: [
{
__typename: "Permission",
code: PermissionEnum.MANAGE_ORDERS,
name: "Manage orders.",
},
{
__typename: "Permission",
code: PermissionEnum.MANAGE_USERS,
name: "Manage customers.",
},
],
},
];
const installableMarketplaceApps = [
{
name: {
en: "Test app",
},
description: {
en: "Test app description",
},
logo: {
source: "https://www.example.com/logo",
color: "#000000",
},
integrations: [],
manifestUrl: "https://www.example.com/manifest",
privacyUrl: "https://www.example.com/privacy",
supportUrl: "https://www.example.com/support",
repositoryUrl: "https://www.example.com/repository",
vercelDeploymentUrl: "https://www.example.com/deployment",
},
{
name: {
en: "Test app",
},
description: {
en: "Test app description",
},
logo: {
source: "https://www.example-2.com/logo",
color: "#000000",
},
integrations: [],
manifestUrl: "https://www.example-2.com/manifest",
privacyUrl: "https://www.example-2.com/privacy",
supportUrl: "https://www.example-2.com/support",
repositoryUrl: "https://www.example-2.com/repository",
vercelDeploymentUrl: "https://www.example-2.com/deployment",
},
];
// Act
const verifiedInstallableMarketplaceApps =
getVerifiedInstallableMarketplaceApps(
installedApps,
installableMarketplaceApps,
);
// Assert
const expectedVerifiedInstallableMarketplaceApps = [
installableMarketplaceApps[1],
];
expect(verifiedInstallableMarketplaceApps).toEqual(
expectedVerifiedInstallableMarketplaceApps,
);
});
});