Skip to content

Commit

Permalink
feat: add analytics assignment and creation of sales channel analytics
Browse files Browse the repository at this point in the history
  • Loading branch information
frobel committed Dec 6, 2024
1 parent ee902a4 commit 9173824
Show file tree
Hide file tree
Showing 3 changed files with 82 additions and 1 deletion.
69 changes: 69 additions & 0 deletions src/services/TestDataService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import type {
Country,
CustomerGroup,
SystemConfig,
SalesChannelAnalytics,
} from '../types/ShopwareTypes';
import { expect } from '@playwright/test';

Expand Down Expand Up @@ -882,6 +883,31 @@ export class TestDataService {
return systemConfigEntry;
}

/**
* Creates a random sales channel analytics entity
*
* @param overrides - Specific data overrides that will be applied to the sales channel analytics data struct.
*/
async createSalesChannelAnalytics(
overrides: Partial<SalesChannelAnalytics> = {},
): Promise<SalesChannelAnalytics> {

const basicSalesChannelAnalyticsStruct = this.getSalesChannelAnalyticsStruct(overrides);


const response = await this.AdminApiClient.post('sales-channel-analytics?_response=detail', {
data: basicSalesChannelAnalyticsStruct,
});
expect(response.ok()).toBeTruthy();

const { data: salesChannelAnalytics } = (await response.json()) as { data: SalesChannelAnalytics };

this.addCreatedRecord('sales_channel_analytics', salesChannelAnalytics.id);

return salesChannelAnalytics;
}


/**
* Assigns a media resource as the download of a digital product.
*
Expand Down Expand Up @@ -1084,6 +1110,35 @@ export class TestDataService {
return salesChannel;
}

/**
* Assigns a sales channel analytics entity to a sales channel.
*
* @param salesChannelId - The uuid of the sales channel.
* @param salesChannelAnalyticsId - The uuid of the sales channel analytics entity.
*/
async assignSalesChannelAnalytics(salesChannelId: string, salesChannelAnalyticsId: string) {

const syncSalesChannelResponse = await this.AdminApiClient.post('./_action/sync', {
data: {
'write-sales-channel': {
entity: 'sales_channel',
action: 'upsert',
payload: [
{
id: salesChannelId,
salesChannelAnalytics: [{ id: salesChannelAnalyticsId }],
},
],
},
},
});
expect(syncSalesChannelResponse.ok()).toBeTruthy();

const { data: salesChannel } = await syncSalesChannelResponse.json();

return salesChannel;
}

/**
* Assigns a country to a sales channel.
*
Expand Down Expand Up @@ -2237,6 +2292,20 @@ export class TestDataService {
return Object.assign({}, basicCustomerGroup, overrides);
}

getSalesChannelAnalyticsStruct(overrides: Partial<SalesChannelAnalytics> = {}): Partial<SalesChannelAnalytics> {
const salesChannelAnalyticsUuid = this.IdProvider.getIdPair().uuid;
const trackingId = this.IdProvider.getIdPair().id;

const basicSalesChannelAnalyticsStruct = {
id: salesChannelAnalyticsUuid,
trackingId: trackingId,
active: true,
trackOrders: false,
anonymizeIp: true,
};
return Object.assign({}, basicSalesChannelAnalyticsStruct, overrides);
}

async clearCaches() {
await this.AdminApiClient.delete('_action/cache');
}
Expand Down
4 changes: 4 additions & 0 deletions src/types/ShopwareTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,10 @@ export type CustomerGroup = components['schemas']['CustomerGroup'] & {
id: string,
};

export type SalesChannelAnalytics = components['schemas']['SalesChannelAnalytics'] & {
id: string,
};

export interface RegistrationData {
salutation: string;
firstName: string;
Expand Down
10 changes: 9 additions & 1 deletion tests/TestDataService/TestDataService.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
Manufacturer,
Category,
APIResponse,
SystemConfig,
SystemConfig, SalesChannelAnalytics,
} from '../../src';

test('Data Service', async ({
Expand Down Expand Up @@ -90,6 +90,9 @@ test('Data Service', async ({
expect(systemConfigEntry.configurationKey).toEqual('test.random.foo');
expect(systemConfigEntry.configurationValue).toEqual(true);

const salesChannelAnalytics = await TestDataService.createSalesChannelAnalytics({ active: false });
expect(salesChannelAnalytics.active).toEqual(false);

// Test data clean-up with deactivated cleansing process
TestDataService.setCleanUp(false);
const cleanUpFalseResponse = await TestDataService.cleanUp();
Expand Down Expand Up @@ -143,6 +146,10 @@ test('Data Service', async ({
const { data: databaseSystemConfigEntry } = (await systemConfigEntryResponse.json()) as { data: SystemConfig };
expect(databaseSystemConfigEntry.id).toBe(systemConfigEntry.id);

const salesChannelAnalyticsResponse = await AdminApiContext.get(`./sales-channel-analytics/${salesChannelAnalytics.id}?_response=detail`);
const { data: databaseSalesChannelAnalytics } = (await salesChannelAnalyticsResponse.json()) as { data: SalesChannelAnalytics };
expect(databaseSalesChannelAnalytics.id).toBe(salesChannelAnalytics.id);

// Test data clean-up with activated cleansing process
TestDataService.setCleanUp(true);
const cleanUpResponse = await TestDataService.cleanUp() as APIResponse;
Expand All @@ -164,4 +171,5 @@ test('Data Service', async ({
expect(cleanUp['deleted']['product_manufacturer']).toBeDefined();
expect(cleanUp['deleted']['cms_page']).toBeDefined();
expect(cleanUp['deleted']['system_config']).toBeDefined();
expect(cleanUp['deleted']['sales_channel_analytics']).toBeDefined();
});

0 comments on commit 9173824

Please sign in to comment.