mollie-dev-server.ts 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { AdminUiPlugin } from '@vendure/admin-ui-plugin';
  2. import {
  3. ChannelService,
  4. DefaultLogger,
  5. Logger,
  6. LogLevel,
  7. mergeConfig,
  8. Order,
  9. OrderService,
  10. RequestContext,
  11. } from '@vendure/core';
  12. import { createTestEnvironment, registerInitializer, SqljsInitializer, testConfig } from '@vendure/testing';
  13. import gql from 'graphql-tag';
  14. import localtunnel from 'localtunnel';
  15. import path from 'path';
  16. import { initialData } from '../../../e2e-common/e2e-initial-data';
  17. import { MolliePlugin } from '../package/mollie';
  18. import { molliePaymentHandler } from '../package/mollie/mollie.handler';
  19. import { CREATE_PAYMENT_METHOD } from './graphql/admin-queries';
  20. import { CreatePaymentMethod } from './graphql/generated-admin-types';
  21. import { AddItemToOrder } from './graphql/generated-shop-types';
  22. import { ADD_ITEM_TO_ORDER } from './graphql/shop-queries';
  23. import { CREATE_MOLLIE_PAYMENT_INTENT, setShipping } from './payment-helpers';
  24. /**
  25. * This should only be used to locally test the Mollie payment plugin
  26. */
  27. /* tslint:disable:no-floating-promises */
  28. (async () => {
  29. require('dotenv').config();
  30. registerInitializer('sqljs', new SqljsInitializer(path.join(__dirname, '__data__')));
  31. const tunnel = await localtunnel({ port: 3050 });
  32. const config = mergeConfig(testConfig, {
  33. plugins: [
  34. ...testConfig.plugins,
  35. AdminUiPlugin.init({
  36. route: 'admin',
  37. port: 5001,
  38. }),
  39. MolliePlugin.init({ vendureHost: tunnel.url }),
  40. ],
  41. logger: new DefaultLogger({ level: LogLevel.Debug }),
  42. });
  43. const { server, shopClient, adminClient } = createTestEnvironment(config as any);
  44. await server.init({
  45. initialData,
  46. productsCsvPath: path.join(__dirname, 'fixtures/e2e-products-minimal.csv'),
  47. customerCount: 1,
  48. });
  49. // Set EUR as currency for Mollie
  50. await adminClient.asSuperAdmin();
  51. await adminClient.query(gql`
  52. mutation {
  53. updateChannel(input: { id: "T_1", currencyCode: EUR }) {
  54. __typename
  55. }
  56. }
  57. `);
  58. // Create method
  59. await adminClient.query<CreatePaymentMethod.Mutation, CreatePaymentMethod.Variables>(
  60. CREATE_PAYMENT_METHOD,
  61. {
  62. input: {
  63. code: 'mollie',
  64. name: 'Mollie payment test',
  65. description: 'This is a Mollie test payment method',
  66. enabled: true,
  67. handler: {
  68. code: molliePaymentHandler.code,
  69. arguments: [
  70. { name: 'redirectUrl', value: `${tunnel.url}/admin/orders?filter=open&page=1` },
  71. // tslint:disable-next-line:no-non-null-assertion
  72. { name: 'apiKey', value: process.env.MOLLIE_APIKEY! },
  73. { name: 'autoCapture', value: 'false' },
  74. ],
  75. },
  76. },
  77. },
  78. );
  79. // Prepare order for payment
  80. await shopClient.asUserWithCredentials('hayden.zieme12@hotmail.com', 'test');
  81. await shopClient.query<AddItemToOrder.Order, AddItemToOrder.Variables>(ADD_ITEM_TO_ORDER, {
  82. productVariantId: '1',
  83. quantity: 2,
  84. });
  85. const ctx = new RequestContext({
  86. apiType: 'admin',
  87. isAuthorized: true,
  88. authorizedAsOwnerOnly: false,
  89. channel: await server.app.get(ChannelService).getDefaultChannel(),
  90. });
  91. await server.app.get(OrderService).addSurchargeToOrder(ctx, 1, {
  92. description: 'Negative test surcharge',
  93. listPrice: -20000,
  94. });
  95. await setShipping(shopClient);
  96. const { createMolliePaymentIntent } = await shopClient.query(CREATE_MOLLIE_PAYMENT_INTENT, {
  97. input: {
  98. paymentMethodCode: 'mollie',
  99. // molliePaymentMethodCode: 'klarnapaylater'
  100. },
  101. });
  102. if (createMolliePaymentIntent.errorCode) {
  103. throw createMolliePaymentIntent;
  104. }
  105. Logger.info(`Mollie payment link: ${createMolliePaymentIntent.url}`, 'Mollie DevServer');
  106. })();