diff --git a/.gitignore b/.gitignore index 0711527..53fdfcd 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,4 @@ testem.log # System files .DS_Store Thumbs.db +/package-lock.json diff --git a/angular.json b/angular.json index 5ee7a26..df435c2 100644 --- a/angular.json +++ b/angular.json @@ -3,23 +3,23 @@ "version": 1, "newProjectRoot": "projects", "projects": { - "adyen-payments": { + "@adyen/adyen-spartacus": { "projectType": "library", - "root": "projects/adyen-payments", - "sourceRoot": "projects/adyen-payments/src", + "root": "projects/adyen/adyen-spartacus", + "sourceRoot": "projects/adyen/adyen-spartacus/src", "prefix": "lib", "architect": { "build": { "builder": "@angular-devkit/build-angular:ng-packagr", "options": { - "project": "projects/adyen-payments/ng-package.json" + "project": "projects/adyen/adyen-spartacus/ng-package.json" }, "configurations": { "production": { - "tsConfig": "projects/adyen-payments/tsconfig.lib.prod.json" + "tsConfig": "projects/adyen/adyen-spartacus/tsconfig.lib.prod.json" }, "development": { - "tsConfig": "projects/adyen-payments/tsconfig.lib.json" + "tsConfig": "projects/adyen/adyen-spartacus/tsconfig.lib.json" } }, "defaultConfiguration": "production" @@ -27,7 +27,7 @@ "test": { "builder": "@angular-devkit/build-angular:karma", "options": { - "tsConfig": "projects/adyen-payments/tsconfig.spec.json", + "tsConfig": "projects/adyen/adyen-spartacus/tsconfig.spec.json", "polyfills": [ "zone.js", "zone.js/testing" @@ -35,6 +35,92 @@ } } } + }, + "showcase":{ + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "projects/showcase", + "sourceRoot": "projects/showcase/src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/showcase", + "index": "projects/showcase/src/index.html", + "browser": "projects/showcase/src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "projects/showcase/tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "projects/showcase/src/favicon.ico", + "projects/showcase/src/assets", + { + "glob": "**/*", + "input": "./node_modules/@spartacus/smartedit/assets", + "output": "assets/" + } + ], + "styles": [ + "projects/showcase/src/styles.scss", + "projects/showcase/src/styles/spartacus/user.scss", + "projects/showcase/src/styles/spartacus/cart.scss", + "projects/showcase/src/styles/spartacus/order.scss", + "projects/showcase/src/styles/spartacus/checkout.scss", + "projects/showcase/src/styles/spartacus/storefinder.scss", + "projects/showcase/src/styles/spartacus/asm.scss", + "projects/showcase/src/styles/spartacus/product.scss" + ], + "scripts": [], + "stylePreprocessorOptions": { + "includePaths": [ + "node_modules/" + ] + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "3.5mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "showcase:build:production" + }, + "development": { + "buildTarget": "showcase:build:development" + } + }, + "defaultConfiguration": "development" + } + } } } } diff --git a/package.json b/package.json index bf52e2f..5afa0ad 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,24 @@ "version": "0.0.0", "scripts": { "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" + "start": "npm-run-all clean --parallel lib:watch showcase:start-waiton", + "build": "run-s lib:build showcase:build", + "test": "run-p lib:test showcase:test", + "test-coverage": "run-p lib:test-coverage showcase:test-coverage", + "lib:build": "ng build @adyen/adyen-spartacus", + "lib:watch": "ng build @adyen/adyen-spartacus --watch --configuration development", + "lib:test": "ng test @adyen/adyen-spartacus", + "lib:test-coverage": "ng test @adyen/adyen-spartacus --no-watch --code-coverage", + "lib:prebuild": "cd projects/adyen/spartacus-payment && npm version patch -m \"Upgrade to %s for build\" ", + "lib:schematics": "tsc -p tsconfig.schematics.json", + "lib:postbuild": "copyfiles schematics/*/files/** schematics/collection.json ../../dist/adyen-payments/", + "showcase:start-waiton": "wait-on dist/adyen/adyen-spartacus/package.json && npm run showcase:start", + "showcase:start": "ng serve showcase", + "showcase:build": "ng build showcase", + "showcase:watch": "ng build showcase --watch --configuration development", + "showcase:test": "ng test showcase", + "showcase:test-coverage": "ng test showcase --no-watch --code-coverage", + "clean": "rimraf dist" }, "dependencies": { "@adyen/adyen-web": "6.3.0", @@ -18,10 +32,21 @@ "@angular/platform-browser": "^17.3.0", "@angular/platform-browser-dynamic": "^17.3.0", "@angular/router": "^17.3.0", + "@spartacus/asm": "~2211.23.0-1", + "@spartacus/assets": "~2211.23.0-1", + "@spartacus/cart": "~2211.23.0-1", + "@spartacus/checkout": "~2211.23.0-1", "@spartacus/core": "~2211.23.0-1", + "@spartacus/order": "~2211.23.0-1", + "@spartacus/pdf-invoices": "~2211.23.0-1", + "@spartacus/product": "~2211.23.0-1", + "@spartacus/smartedit": "~2211.23.0-1", + "@spartacus/storefinder": "~2211.23.0-1", "@spartacus/storefront": "~2211.23.0-1", - "@spartacus/checkout": "~2211.23.0-1", - "@spartacus/cart": "~2211.23.0-1", + "@spartacus/styles": "~2211.23.0-1", + "@spartacus/tracking": "~2211.23.0-1", + "@spartacus/user": "~2211.23.0-1", + "adyen-payments": "^1.0.6", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.3" @@ -38,6 +63,9 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "ng-packagr": "^17.3.0", - "typescript": "~5.4.2" + "npm-run-all": "^4.1.5", + "rimraf": "^6.0.1", + "typescript": "~5.4.2", + "wait-on": "^7.2.0" } } diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.scss b/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.scss deleted file mode 100644 index da4be9c..0000000 --- a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.scss +++ /dev/null @@ -1 +0,0 @@ -@import '@adyen/adyen-web/dist/adyen.css'; diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.spec.ts b/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.spec.ts deleted file mode 100644 index e7f8952..0000000 --- a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.spec.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { CheckoutAdyenPaymentMethodComponent } from './checkout-adyen-payment-method.component'; - -describe('CheckoutAdyenPaymentMethodComponent', () => { - let component: CheckoutAdyenPaymentMethodComponent; - let fixture: ComponentFixture; - - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [CheckoutAdyenPaymentMethodComponent] - }) - .compileComponents(); - - fixture = TestBed.createComponent(CheckoutAdyenPaymentMethodComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); - - it('should create', () => { - expect(component).toBeTruthy(); - }); -}); diff --git a/projects/adyen-payments/src/lib/core/occ/adapters/occ-checkout-config.adapter.spec.ts b/projects/adyen-payments/src/lib/core/occ/adapters/occ-checkout-config.adapter.spec.ts deleted file mode 100644 index 07a49fb..0000000 --- a/projects/adyen-payments/src/lib/core/occ/adapters/occ-checkout-config.adapter.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { OccCheckoutConfigAdapter } from './occ-checkout-config.adapter'; - -describe('CheckoutConfigServiceService', () => { - let service: OccCheckoutConfigAdapter; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(OccCheckoutConfigAdapter); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/projects/adyen-payments/src/public-api.ts b/projects/adyen-payments/src/public-api.ts deleted file mode 100644 index db0b855..0000000 --- a/projects/adyen-payments/src/public-api.ts +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Public API Surface of adyen-payments - */ - -export * from './lib/adyen-payments.module'; -export * from './lib/root/checkout-adyen-root.module'; -export * from './lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component'; -export * from './lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.module'; -export * from './lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component'; -export * from './lib/service/adyen-order.service'; - diff --git a/projects/adyen-payments/README.md b/projects/adyen/adyen-spartacus/README.md similarity index 100% rename from projects/adyen-payments/README.md rename to projects/adyen/adyen-spartacus/README.md diff --git a/projects/adyen-payments/import/adyen-payment-details.impex b/projects/adyen/adyen-spartacus/import/adyen-payment-details.impex similarity index 100% rename from projects/adyen-payments/import/adyen-payment-details.impex rename to projects/adyen/adyen-spartacus/import/adyen-payment-details.impex diff --git a/projects/adyen-payments/ng-package.json b/projects/adyen/adyen-spartacus/ng-package.json similarity index 52% rename from projects/adyen-payments/ng-package.json rename to projects/adyen/adyen-spartacus/ng-package.json index 7cef781..e4a81b8 100644 --- a/projects/adyen-payments/ng-package.json +++ b/projects/adyen/adyen-spartacus/ng-package.json @@ -1,6 +1,6 @@ { - "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/adyen-payments", + "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../../dist/adyen/adyen-spartacus", "lib": { "entryFile": "src/public-api.ts" }, diff --git a/projects/adyen-payments/package.json b/projects/adyen/adyen-spartacus/package.json similarity index 60% rename from projects/adyen-payments/package.json rename to projects/adyen/adyen-spartacus/package.json index 942026d..82da14f 100644 --- a/projects/adyen-payments/package.json +++ b/projects/adyen/adyen-spartacus/package.json @@ -1,14 +1,8 @@ { - "name": "adyen-payments", + "name": "@adyen/adyen-spartacus", "version": "1.0.0", - "scripts": { - "prebuild": "npm version patch -m \"Upgrade to %s for build\"", - "build": "ng build && tsc -p tsconfig.schematics.json", - "postbuild": "copyfiles schematics/*/files/** schematics/collection.json ../../dist/adyen-payments/" - }, "schematics": "./schematics/collection.json", "peerDependencies": { - "@adyen/adyen-web": "6.3.0", "@angular/common": "^17.3.0", "@angular/core": "^17.3.0" }, diff --git a/projects/adyen-payments/schematics/adyen-payment-step/files/checkout-feature.module.ts b/projects/adyen/adyen-spartacus/schematics/adyen-payment-step/files/checkout-feature.module.ts similarity index 100% rename from projects/adyen-payments/schematics/adyen-payment-step/files/checkout-feature.module.ts rename to projects/adyen/adyen-spartacus/schematics/adyen-payment-step/files/checkout-feature.module.ts diff --git a/projects/adyen-payments/schematics/adyen-payment-step/files/order-feature.module.ts b/projects/adyen/adyen-spartacus/schematics/adyen-payment-step/files/order-feature.module.ts similarity index 100% rename from projects/adyen-payments/schematics/adyen-payment-step/files/order-feature.module.ts rename to projects/adyen/adyen-spartacus/schematics/adyen-payment-step/files/order-feature.module.ts diff --git a/projects/adyen-payments/schematics/adyen-payment-step/index.ts b/projects/adyen/adyen-spartacus/schematics/adyen-payment-step/index.ts similarity index 100% rename from projects/adyen-payments/schematics/adyen-payment-step/index.ts rename to projects/adyen/adyen-spartacus/schematics/adyen-payment-step/index.ts diff --git a/projects/adyen-payments/schematics/collection.json b/projects/adyen/adyen-spartacus/schematics/collection.json similarity index 100% rename from projects/adyen-payments/schematics/collection.json rename to projects/adyen/adyen-spartacus/schematics/collection.json diff --git a/projects/adyen-payments/schematics/ng-add/index.ts b/projects/adyen/adyen-spartacus/schematics/ng-add/index.ts similarity index 100% rename from projects/adyen-payments/schematics/ng-add/index.ts rename to projects/adyen/adyen-spartacus/schematics/ng-add/index.ts diff --git a/projects/adyen-payments/src/lib/adyen-payments.module.ts b/projects/adyen/adyen-spartacus/src/adyen-payments.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/adyen-payments.module.ts rename to projects/adyen/adyen-spartacus/src/adyen-payments.module.ts diff --git a/projects/adyen-payments/src/lib/adyen-payments.service.spec.ts b/projects/adyen/adyen-spartacus/src/adyen-payments.service.spec.ts similarity index 100% rename from projects/adyen-payments/src/lib/adyen-payments.service.spec.ts rename to projects/adyen/adyen-spartacus/src/adyen-payments.service.spec.ts diff --git a/projects/adyen-payments/src/lib/adyen-payments.service.ts b/projects/adyen/adyen-spartacus/src/adyen-payments.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/adyen-payments.service.ts rename to projects/adyen/adyen-spartacus/src/adyen-payments.service.ts diff --git a/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-error.component.spec.ts b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-error.component.spec.ts new file mode 100644 index 0000000..87bdcfd --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-error.component.spec.ts @@ -0,0 +1,75 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { AdyenRedirectErrorComponent } from './adyen-redirect-error.component'; +import { RoutingService, GlobalMessageService, GlobalMessageType, OCC_CART_ID_CURRENT, TranslationService, UserIdService } from '@spartacus/core'; +import { MultiCartFacade } from '@spartacus/cart/base/root'; + +describe('AdyenRedirectErrorComponent', () => { + let component: AdyenRedirectErrorComponent; + let fixture: ComponentFixture; + let mockRoutingService: jasmine.SpyObj; + let mockGlobalMessageService: jasmine.SpyObj; + let mockTranslationService: jasmine.SpyObj; + let mockUserIdService: jasmine.SpyObj; + let mockMultiCartFacade: jasmine.SpyObj; + + beforeEach(async () => { + mockRoutingService = jasmine.createSpyObj('RoutingService', ['getParams', 'go']); + mockGlobalMessageService = jasmine.createSpyObj('GlobalMessageService', ['add']); + mockTranslationService = jasmine.createSpyObj('TranslationService', ['translate']); + mockUserIdService = jasmine.createSpyObj('UserIdService', ['takeUserId']); + mockMultiCartFacade = jasmine.createSpyObj('MultiCartFacade', ['reloadCart', 'loadCart', 'getCartIdByType']); + + mockRoutingService.getParams.and.returnValue(of({ errorCode: btoa('someErrorCode') })); + mockTranslationService.translate.and.returnValue(of('translatedMessage')); + mockUserIdService.takeUserId.and.returnValue(of('userId')); + mockMultiCartFacade.getCartIdByType.and.returnValue(of('cartId')); + + await TestBed.configureTestingModule({ + declarations: [AdyenRedirectErrorComponent], + providers: [ + { provide: RoutingService, useValue: mockRoutingService }, + { provide: GlobalMessageService, useValue: mockGlobalMessageService }, + { provide: TranslationService, useValue: mockTranslationService }, + { provide: UserIdService, useValue: mockUserIdService }, + { provide: MultiCartFacade, useValue: mockMultiCartFacade } + ] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdyenRedirectErrorComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should add error message and reload cart on init', () => { + const errorCode = 'someErrorCode'; + const translatedMessage = 'translatedMessage'; + const userId = 'userId'; + const cartId = 'cartId'; + + mockRoutingService.getParams.and.returnValue(of({ errorCode: btoa(errorCode) })); + mockTranslationService.translate.and.returnValue(of(translatedMessage)); + mockUserIdService.takeUserId.and.returnValue(of(userId)); + mockMultiCartFacade.getCartIdByType.and.returnValue(of(cartId)); + + component.ngOnInit(); + + expect(mockTranslationService.translate).toHaveBeenCalledWith(component['placeOrderErrorCodePrefix'] + errorCode); + expect(mockGlobalMessageService.add).toHaveBeenCalledWith(translatedMessage, GlobalMessageType.MSG_TYPE_ERROR, component['messageTimeout']); + expect(mockMultiCartFacade.reloadCart).toHaveBeenCalledWith(OCC_CART_ID_CURRENT); + expect(mockMultiCartFacade.loadCart).toHaveBeenCalledWith({ cartId: OCC_CART_ID_CURRENT, userId }); + expect(mockRoutingService.go).toHaveBeenCalledWith({ cxRoute: 'checkoutAdyenPaymentDetails' }); + }); + + it('should unsubscribe from all subscriptions on destroy', () => { + spyOn(component['subscriptions'], 'unsubscribe'); + component.ngOnDestroy(); + expect(component['subscriptions'].unsubscribe).toHaveBeenCalled(); + }); +}); diff --git a/projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect-error.component.ts b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-error.component.ts similarity index 100% rename from projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect-error.component.ts rename to projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-error.component.ts diff --git a/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-success.component.spec.ts b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-success.component.spec.ts new file mode 100644 index 0000000..5a6f132 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-success.component.spec.ts @@ -0,0 +1,67 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { AdyenRedirectSuccessComponent } from './adyen-redirect-success.component'; +import { RoutingService } from '@spartacus/core'; +import { AdyenOrderService } from '../service/adyen-order.service'; + +describe('AdyenRedirectSuccessComponent', () => { + let component: AdyenRedirectSuccessComponent; + let fixture: ComponentFixture; + let mockRoutingService: jasmine.SpyObj; + let mockAdyenOrderService: jasmine.SpyObj; + + beforeEach(async () => { + mockRoutingService = jasmine.createSpyObj('RoutingService', ['getParams', 'go']); + mockAdyenOrderService = jasmine.createSpyObj('AdyenOrderService', ['loadOrderDetails', 'getOrderDetails']); + + // Ensure the mocked methods return Observables + mockRoutingService.getParams.and.returnValue(of({ orderCode: '12345' })); + mockAdyenOrderService.getOrderDetails.and.returnValue(of({})); + + await TestBed.configureTestingModule({ + declarations: [AdyenRedirectSuccessComponent], + providers: [ + { provide: RoutingService, useValue: mockRoutingService }, + { provide: AdyenOrderService, useValue: mockAdyenOrderService } + ] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdyenRedirectSuccessComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should load order by code on init', () => { + const orderCode = '12345'; + mockRoutingService.getParams.and.returnValue(of({ orderCode })); + mockAdyenOrderService.getOrderDetails.and.returnValue(of({})); + + component.ngOnInit(); + + expect(mockAdyenOrderService.loadOrderDetails).toHaveBeenCalledWith(orderCode); + }); + + it('should navigate to order confirmation if order details are available', () => { + mockRoutingService.getParams.and.returnValue(of({ orderCode: '12345' })); + mockAdyenOrderService.getOrderDetails.and.returnValue(of({})); + + component.ngOnInit(); + + expect(mockRoutingService.go).toHaveBeenCalledWith({ cxRoute: 'orderConfirmation' }); + }); + + it('should not navigate if order details are not available', () => { + mockRoutingService.getParams.and.returnValue(of({ orderCode: '12345' })); + mockAdyenOrderService.getOrderDetails.and.returnValue(of(undefined)); + + component.ngOnInit(); + + expect(mockRoutingService.go).not.toHaveBeenCalled(); + }); +}); diff --git a/projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect-success.component.ts b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-success.component.ts similarity index 96% rename from projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect-success.component.ts rename to projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-success.component.ts index df50445..7ea3fc6 100644 --- a/projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect-success.component.ts +++ b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect-success.component.ts @@ -21,7 +21,7 @@ export class AdyenRedirectSuccessComponent implements OnInit { }) this.adyenOrderService.getOrderDetails().subscribe((order) => { - if (order) { + if (order && order.code) { this.routingService.go({cxRoute: 'orderConfirmation'}); } }) diff --git a/projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect.component.html b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect.component.html similarity index 100% rename from projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect.component.html rename to projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect.component.html diff --git a/projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect.module.ts b/projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/adyen-redirect/adyen-redirect.module.ts rename to projects/adyen/adyen-spartacus/src/adyen-redirect/adyen-redirect.module.ts diff --git a/projects/adyen-payments/src/lib/assets/public_api.ts b/projects/adyen/adyen-spartacus/src/assets/public_api.ts similarity index 100% rename from projects/adyen-payments/src/lib/assets/public_api.ts rename to projects/adyen/adyen-spartacus/src/assets/public_api.ts diff --git a/projects/adyen-payments/src/lib/assets/translations/en/adyen-checkout.ts b/projects/adyen/adyen-spartacus/src/assets/translations/en/adyen-checkout.ts similarity index 100% rename from projects/adyen-payments/src/lib/assets/translations/en/adyen-checkout.ts rename to projects/adyen/adyen-spartacus/src/assets/translations/en/adyen-checkout.ts diff --git a/projects/adyen-payments/src/lib/assets/translations/en/index.ts b/projects/adyen/adyen-spartacus/src/assets/translations/en/index.ts similarity index 100% rename from projects/adyen-payments/src/lib/assets/translations/en/index.ts rename to projects/adyen/adyen-spartacus/src/assets/translations/en/index.ts diff --git a/projects/adyen-payments/src/lib/assets/translations/en/payment-errors.ts b/projects/adyen/adyen-spartacus/src/assets/translations/en/payment-errors.ts similarity index 100% rename from projects/adyen-payments/src/lib/assets/translations/en/payment-errors.ts rename to projects/adyen/adyen-spartacus/src/assets/translations/en/payment-errors.ts diff --git a/projects/adyen-payments/src/lib/assets/translations/translations.ts b/projects/adyen/adyen-spartacus/src/assets/translations/translations.ts similarity index 100% rename from projects/adyen-payments/src/lib/assets/translations/translations.ts rename to projects/adyen/adyen-spartacus/src/assets/translations/translations.ts diff --git a/projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.html b/projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.html similarity index 100% rename from projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.html rename to projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.html diff --git a/projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.scss b/projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.scss similarity index 100% rename from projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.scss rename to projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.scss diff --git a/projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.spec.ts b/projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.spec.ts similarity index 100% rename from projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.spec.ts rename to projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.spec.ts diff --git a/projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.ts b/projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.ts similarity index 100% rename from projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.component.ts rename to projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.component.ts diff --git a/projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.module.ts b/projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/cart/components/express-checkout-cart/express-checkout-cart.module.ts rename to projects/adyen/adyen-spartacus/src/cart/components/express-checkout-cart/express-checkout-cart.module.ts diff --git a/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.spec.ts b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.spec.ts new file mode 100644 index 0000000..2c149d4 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.spec.ts @@ -0,0 +1,97 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { AdyenCheckoutAdyenDeliveryAddressComponent } from './adyen-checkout-adyen-delivery-address.component'; +import { UserAddressService, TranslationService, GlobalMessageService, Address } from '@spartacus/core'; +import { ActiveCartFacade } from '@spartacus/cart/base/root'; +import { CheckoutDeliveryAddressFacade } from '@spartacus/checkout/base/root'; +import { CheckoutStepService } from '@spartacus/checkout/base/components'; +import { AdyenAddressService } from '../../service/adyen-address.service'; +import { of, BehaviorSubject } from 'rxjs'; +import { ActivatedRoute } from '@angular/router'; +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ name: 'cxTranslate' }) +class MockCxTranslatePipe implements PipeTransform { + transform(value: string): string { + return value; + } +} + +describe('AdyenCheckoutAdyenDeliveryAddressComponent', () => { + let component: AdyenCheckoutAdyenDeliveryAddressComponent; + let fixture: ComponentFixture; + let mockUserAddressService: any; + let mockCheckoutDeliveryAddressFacade: any; + let mockActiveCartFacade: any; + let mockTranslationService: any; + let mockGlobalMessageService: any; + let mockAdyenAddressService: any; + let mockCheckoutStepService: any; + let mockActivatedRoute: any; + + beforeEach(async () => { + mockUserAddressService = jasmine.createSpyObj('UserAddressService', ['loadAddresses', 'getAddresses', 'getAddressesLoading']); + mockUserAddressService.getAddressesLoading.and.returnValue(of(false)); + mockCheckoutDeliveryAddressFacade = jasmine.createSpyObj('CheckoutDeliveryAddressFacade', ['getDeliveryAddressState']); + mockCheckoutDeliveryAddressFacade.getDeliveryAddressState.and.returnValue(of({ loading: false })); + mockActiveCartFacade = jasmine.createSpyObj('ActiveCartFacade', ['isGuestCart']); + mockActiveCartFacade.isGuestCart.and.returnValue(of(true)); + mockTranslationService = jasmine.createSpyObj('TranslationService', ['translate']); + mockGlobalMessageService = jasmine.createSpyObj('GlobalMessageService', ['add']); + mockAdyenAddressService = jasmine.createSpyObj('AdyenAddressService', ['adyenAddUserAddress']); + mockCheckoutStepService = jasmine.createSpyObj('CheckoutStepService', ['next']); + mockActivatedRoute = { snapshot: { queryParamMap: { get: jasmine.createSpy().and.returnValue('sessionId') } } }; + + await TestBed.configureTestingModule({ + declarations: [AdyenCheckoutAdyenDeliveryAddressComponent,MockCxTranslatePipe], + providers: [ + { provide: UserAddressService, useValue: mockUserAddressService }, + { provide: CheckoutDeliveryAddressFacade, useValue: mockCheckoutDeliveryAddressFacade }, + { provide: ActiveCartFacade, useValue: mockActiveCartFacade }, + { provide: TranslationService, useValue: mockTranslationService }, + { provide: GlobalMessageService, useValue: mockGlobalMessageService }, + { provide: AdyenAddressService, useValue: mockAdyenAddressService }, + { provide: CheckoutStepService, useValue: mockCheckoutStepService }, + { provide: ActivatedRoute, useValue: mockActivatedRoute }, + ] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdyenCheckoutAdyenDeliveryAddressComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should initialize component properties correctly', () => { + expect(component.sameAsDeliveryAddress).toBeTrue(); + expect(component.selectedAddress$).toBeDefined(); + }); + + it('should set selected address correctly in selectAddress', () => { + const address: Address = { id: 'test' } as Address; + component.selectAddress(address); + expect(component.selectedAddress$.getValue()).toEqual(address); + }); + + it('should add a new address and update state correctly in addAddress', () => { + const address: Address = { id: 'test' } as Address; + mockAdyenAddressService.adyenAddUserAddress.and.returnValue(of(address)); + spyOn(component.setBillingAddress, 'emit'); + component.addAddress(address); + expect(mockAdyenAddressService.adyenAddUserAddress).toHaveBeenCalledWith(address); + expect(component.setBillingAddress.emit).toHaveBeenCalledWith(address); + expect(component.selectedAddress$.getValue()).toEqual(address); + }); + + it('should toggle sameAsDeliveryAddress correctly', () => { + component.sameAsDeliveryAddress = true; + component.toggleSameAsDeliveryAddress(); + expect(component.sameAsDeliveryAddress).toBeFalse(); + component.toggleSameAsDeliveryAddress(); + expect(component.sameAsDeliveryAddress).toBeTrue(); + }); +}); diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.ts b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.ts similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.ts rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/adyen-checkout-adyen-delivery-address.component.ts diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.html b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.html similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.html rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.html diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.module.ts b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.module.ts rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.module.ts diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.scss b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.scss similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.scss rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-delivery-address/checkout-adyen-delivery-address.scss diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.html b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.html similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.html rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.html diff --git a/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.scss b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.scss new file mode 100644 index 0000000..ae89c75 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.scss @@ -0,0 +1 @@ +/*@import '@adyen/adyen-web/dist/adyen.css';*/ diff --git a/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.spec.ts b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.spec.ts new file mode 100644 index 0000000..f7d6eae --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.spec.ts @@ -0,0 +1,190 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { CheckoutAdyenPaymentMethodComponent } from './checkout-adyen-payment-method.component'; +import { ActivatedRoute } from '@angular/router'; +import { ActiveCartFacade, CartType, MultiCartFacade } from '@spartacus/cart/base/root'; +import { CheckoutDeliveryAddressFacade } from '@spartacus/checkout/base/root'; +import { + EventService, + GlobalMessageService, + RoutingService, + UserIdService, + UserPaymentService, + I18nModule, + TranslationService, + UserAddressService, + UserAddressConnector, + UserAddressAdapter, + QueryState, +} from '@spartacus/core'; +import { CheckoutStepService } from '@spartacus/checkout/base/components'; +import { CheckoutAdyenConfigurationService } from '../service/checkout-adyen-configuration.service'; +import { AdyenOrderService } from '../service/adyen-order.service'; +import { CheckoutAdyenConfigurationReloadEvent } from '../events/checkout-adyen.events'; +import { Store, StoreModule } from '@ngrx/store'; +import { AdyenAddressService } from '../service/adyen-address.service'; +import { map } from 'rxjs/operators'; +import { AdyenConfigData } from '../core/models/occ.config.models'; +import { Pipe, PipeTransform } from '@angular/core'; +import { Component } from '@angular/core'; + +@Pipe({ name: 'cxTranslate' }) +class MockCxTranslatePipe implements PipeTransform { + transform(value: string): string { + return value; // or return a mock translation + } +} + + +@Component({ + selector: 'cx-adyen-delivery-address', + template: '' +}) +class MockAdyenCheckoutDeliveryAddressComponent {} + + +describe('CheckoutAdyenPaymentMethodComponent', () => { + let component: CheckoutAdyenPaymentMethodComponent; + let fixture: ComponentFixture; + let mockActivatedRoute: any; + let mockActiveCartFacade: any; + let mockCheckoutDeliveryAddressFacade: any; + let mockRoutingService: any; + let mockUserPaymentService: any; + let mockCheckoutStepService: any; + let mockCheckoutAdyenConfigurationService: any; + let mockAdyenOrderService: any; + let mockEventService: any; + let mockUserIdService: any; + let mockMultiCartFacade: any; + let mockTranslationService: any; + let mockStore: any; + let mockUserAddressAdapter: any; + let mockAdyenAddressService: any; + let mockTranslateService: any; + + + const mockAdyenConfigData: AdyenConfigData = { + paymentMethods: [], + connectedTerminalList: [], + storedPaymentMethodList: [], + issuerLists: new Map(), + creditCardLabel: 'Credit Card', + allowedCards: [], + amount: { value: 1000, currency: 'USD' }, + adyenClientKey: 'mockClientKey', + adyenPaypalMerchantId: 'mockPaypalMerchantId', + deviceFingerPrintUrl: 'mockDeviceFingerPrintUrl', + sessionData: { id: 'mockSessionId', sessionData: 'mockSessionData' }, + selectedPaymentMethod: 'mockPaymentMethod', + showRememberTheseDetails: true, + checkoutShopperHost: 'mockShopperHost', + environmentMode: 'test', + shopperLocale: 'en-US', + openInvoiceMethods: [], + showSocialSecurityNumber: false, + showBoleto: false, + showComboCard: false, + showPos: false, + immediateCapture: false, + countryCode: 'US', + cardHolderNameRequired: true, + sepaDirectDebit: false + }; + + const mockStateData = { + loading: false, + error: false, + data: { + id: '1', + title: 'Mr.', + firstName: 'John', + lastName: 'Doe', + line1: '123 Main St', + town: 'Anytown', + postalCode: '12345', + country: { isocode: 'US', name: 'United States' } + } + }; + + beforeEach(async () => { + mockActivatedRoute = { snapshot: { queryParamMap: { get: jasmine.createSpy().and.returnValue('sessionId') } } }; + mockActiveCartFacade = jasmine.createSpyObj('ActiveCartFacade', ['isGuestCart', 'getActiveCartId']); + mockActiveCartFacade.isGuestCart.and.returnValue(of(false)); + mockCheckoutDeliveryAddressFacade = jasmine.createSpyObj('CheckoutDeliveryAddressFacade', ['getDeliveryAddressState']); + mockCheckoutDeliveryAddressFacade.getDeliveryAddressState.and.returnValue( + of(mockStateData).pipe( + map(state => state) // Example operator, replace with actual operators if needed + ) + ); + mockRoutingService = jasmine.createSpyObj('RoutingService', ['go']); + mockUserPaymentService = jasmine.createSpyObj('UserPaymentService', ['loadPaymentMethods']); + mockCheckoutStepService = jasmine.createSpyObj('CheckoutStepService', ['next', 'back']); + mockCheckoutAdyenConfigurationService = jasmine.createSpyObj('CheckoutAdyenConfigurationService', ['getCheckoutConfigurationState']); + mockCheckoutAdyenConfigurationService.getCheckoutConfigurationState.and.returnValue( + of({ loading: false, error: false, data: mockAdyenConfigData } as QueryState) + ); + mockAdyenOrderService = jasmine.createSpyObj('AdyenOrderService', ['adyenPlaceOrder', 'sendAdditionalDetails', 'sendPaymentCancelled']); + mockEventService = jasmine.createSpyObj('EventService', ['dispatch', 'get']); + mockEventService.get.and.returnValue(of(new CheckoutAdyenConfigurationReloadEvent())); + mockUserIdService = jasmine.createSpyObj('UserIdService', ['takeUserId']); + mockUserIdService.takeUserId.and.returnValue(of('userId')); + mockMultiCartFacade = jasmine.createSpyObj('MultiCartFacade', ['reloadCart', 'loadCart', 'getCartIdByType']); + mockMultiCartFacade.getCartIdByType.and.returnValue(of('cartId')); + mockTranslationService = jasmine.createSpyObj('TranslationService', ['translate']); + mockStore = jasmine.createSpyObj('Store', ['select', 'dispatch']); + mockUserAddressAdapter = jasmine.createSpyObj('UserAddressAdapter', ['load']); + mockAdyenAddressService = jasmine.createSpyObj('AdyenAddressService', ['someMethod']); + mockTranslateService = jasmine.createSpyObj('TranslateService', ['get']); + mockTranslateService.get.and.returnValue(of('translated text')); + + + await TestBed.configureTestingModule({ + declarations: [CheckoutAdyenPaymentMethodComponent, MockCxTranslatePipe, MockAdyenCheckoutDeliveryAddressComponent], + imports: [I18nModule, StoreModule.forRoot({})], + providers: [ + { provide: ActivatedRoute, useValue: mockActivatedRoute }, + { provide: ActiveCartFacade, useValue: mockActiveCartFacade }, + { provide: CheckoutDeliveryAddressFacade, useValue: mockCheckoutDeliveryAddressFacade }, + { provide: RoutingService, useValue: mockRoutingService }, + { provide: UserPaymentService, useValue: mockUserPaymentService }, + { provide: CheckoutStepService, useValue: mockCheckoutStepService }, + { provide: CheckoutAdyenConfigurationService, useValue: mockCheckoutAdyenConfigurationService }, + { provide: AdyenOrderService, useValue: mockAdyenOrderService }, + { provide: EventService, useValue: mockEventService }, + { provide: UserIdService, useValue: mockUserIdService }, + { provide: MultiCartFacade, useValue: mockMultiCartFacade }, + { provide: TranslationService, useValue: mockTranslationService }, + { provide: Store, useValue: mockStore }, + { provide: UserAddressAdapter, useValue: mockUserAddressAdapter }, + { provide: AdyenAddressService, useValue: mockAdyenAddressService }, + ] + }).compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CheckoutAdyenPaymentMethodComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should load payment methods if not guest checkout', () => { + component.ngOnInit(); + expect(mockUserPaymentService.loadPaymentMethods).toHaveBeenCalled(); + }); + + it('should navigate to order confirmation on success', () => { + component.onSuccess(); + expect(mockRoutingService.go).toHaveBeenCalledWith({ cxRoute: 'orderConfirmation' }); + }); + + it('should unsubscribe from all subscriptions on destroy', () => { + spyOn(component['subscriptions'], 'unsubscribe'); + component.ngOnDestroy(); + expect(component['subscriptions'].unsubscribe).toHaveBeenCalled(); + }); +}); diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.ts b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.ts similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.component.ts rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.component.ts diff --git a/projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.module.ts b/projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/checkout-adyen-payment-method/checkout-adyen-payment-method.module.ts rename to projects/adyen/adyen-spartacus/src/checkout-adyen-payment-method/checkout-adyen-payment-method.module.ts diff --git a/projects/adyen-payments/src/lib/config/adyen-checkout-config.ts b/projects/adyen/adyen-spartacus/src/config/adyen-checkout-config.ts similarity index 100% rename from projects/adyen-payments/src/lib/config/adyen-checkout-config.ts rename to projects/adyen/adyen-spartacus/src/config/adyen-checkout-config.ts diff --git a/projects/adyen-payments/src/lib/config/adyen-checkout-routing-config.ts b/projects/adyen/adyen-spartacus/src/config/adyen-checkout-routing-config.ts similarity index 100% rename from projects/adyen-payments/src/lib/config/adyen-checkout-routing-config.ts rename to projects/adyen/adyen-spartacus/src/config/adyen-checkout-routing-config.ts diff --git a/projects/adyen-payments/src/lib/core/checkout-adyen-core.module.ts b/projects/adyen/adyen-spartacus/src/core/checkout-adyen-core.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/checkout-adyen-core.module.ts rename to projects/adyen/adyen-spartacus/src/core/checkout-adyen-core.module.ts diff --git a/projects/adyen/adyen-spartacus/src/core/connectors/additional-details.connector.spec.ts b/projects/adyen/adyen-spartacus/src/core/connectors/additional-details.connector.spec.ts new file mode 100644 index 0000000..6b6f99c --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/core/connectors/additional-details.connector.spec.ts @@ -0,0 +1,53 @@ +import { TestBed } from '@angular/core/testing'; +import { AdditionalDetailsConnector } from './additional-details.connector'; +import { OccAdditionalDetailsAdapter } from '../occ/adapters/occ-additionaldetails.adapter'; +import { of } from 'rxjs'; +import { PlaceOrderRequest, PlaceOrderResponse } from '../models/occ.order.models'; + +describe('AdditionalDetailsConnector', () => { + let connector: AdditionalDetailsConnector; + let adapter: jasmine.SpyObj; + + beforeEach(() => { + const adapterSpy = jasmine.createSpyObj('OccAdditionalDetailsAdapter', ['sendAdditionalDetails']); + + TestBed.configureTestingModule({ + providers: [ + AdditionalDetailsConnector, + { provide: OccAdditionalDetailsAdapter, useValue: adapterSpy } + ] + }); + + connector = TestBed.inject(AdditionalDetailsConnector); + adapter = TestBed.inject(OccAdditionalDetailsAdapter) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(connector).toBeTruthy(); + }); + + it('should call sendAdditionalDetails on the adapter', () => { + const userId = 'testUser'; + const cartId = 'testCart'; + const orderData: PlaceOrderRequest = { + paymentRequest: {} + }; + const response: PlaceOrderResponse = { + success: true, + executeAction: false, + paymentsAction: undefined, + error: undefined, + errorFieldCodes: [], + orderNumber: '12345', + orderData: {} + }; + + adapter.sendAdditionalDetails.and.returnValue(of(response)); + + connector.sendAdditionalDetails(userId, cartId, orderData).subscribe(result => { + expect(result).toEqual(response); + }); + + expect(adapter.sendAdditionalDetails).toHaveBeenCalledWith(userId, cartId, orderData); + }); +}); diff --git a/projects/adyen-payments/src/lib/core/connectors/additional-details.connector.ts b/projects/adyen/adyen-spartacus/src/core/connectors/additional-details.connector.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/connectors/additional-details.connector.ts rename to projects/adyen/adyen-spartacus/src/core/connectors/additional-details.connector.ts diff --git a/projects/adyen-payments/src/lib/core/connectors/adyen-order-connector.service.ts b/projects/adyen/adyen-spartacus/src/core/connectors/adyen-order-connector.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/connectors/adyen-order-connector.service.ts rename to projects/adyen/adyen-spartacus/src/core/connectors/adyen-order-connector.service.ts diff --git a/projects/adyen-payments/src/lib/core/connectors/checkout-configuration.connector.ts b/projects/adyen/adyen-spartacus/src/core/connectors/checkout-configuration.connector.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/connectors/checkout-configuration.connector.ts rename to projects/adyen/adyen-spartacus/src/core/connectors/checkout-configuration.connector.ts diff --git a/projects/adyen-payments/src/lib/core/models/occ.config.models.ts b/projects/adyen/adyen-spartacus/src/core/models/occ.config.models.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/models/occ.config.models.ts rename to projects/adyen/adyen-spartacus/src/core/models/occ.config.models.ts diff --git a/projects/adyen-payments/src/lib/core/models/occ.order.models.ts b/projects/adyen/adyen-spartacus/src/core/models/occ.order.models.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/models/occ.order.models.ts rename to projects/adyen/adyen-spartacus/src/core/models/occ.order.models.ts diff --git a/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-additionaldetails.adapter.spec.ts b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-additionaldetails.adapter.spec.ts new file mode 100644 index 0000000..2a84ded --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-additionaldetails.adapter.spec.ts @@ -0,0 +1,62 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { OccAdditionalDetailsAdapter } from './occ-additionaldetails.adapter'; +import { OccEndpointsService } from '@spartacus/core'; +import { PlaceOrderRequest, PlaceOrderResponse } from '../../models/occ.order.models'; + +describe('OccAdditionalDetailsAdapter', () => { + let adapter: OccAdditionalDetailsAdapter; + let httpMock: HttpTestingController; + let occEndpointsService: jasmine.SpyObj; + + beforeEach(() => { + const occEndpointsServiceSpy = jasmine.createSpyObj('OccEndpointsService', ['buildUrl']); + + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + OccAdditionalDetailsAdapter, + { provide: OccEndpointsService, useValue: occEndpointsServiceSpy } + ] + }); + + adapter = TestBed.inject(OccAdditionalDetailsAdapter); + httpMock = TestBed.inject(HttpTestingController); + occEndpointsService = TestBed.inject(OccEndpointsService) as jasmine.SpyObj; + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(adapter).toBeTruthy(); + }); + + it('should call sendAdditionalDetails and return PlaceOrderResponse', () => { + const userId = 'testUser'; + const cartId = 'testCart'; + const details: PlaceOrderRequest = { + paymentRequest: { /* mock payment request data */ } + }; + const mockResponse: PlaceOrderResponse = { + success: true, + executeAction: false, + paymentsAction: undefined, + error: undefined, + errorFieldCodes: [], + orderNumber: '12345', + orderData: { /* mock order data */ } + }; + + occEndpointsService.buildUrl.and.returnValue(`users/${userId}/carts/${cartId}/adyen/additional-details`); + + adapter.sendAdditionalDetails(userId, cartId, details).subscribe(response => { + expect(response).toEqual(mockResponse); + }); + + const req = httpMock.expectOne(`users/${userId}/carts/${cartId}/adyen/additional-details`); + expect(req.request.method).toBe('POST'); + req.flush(mockResponse); + }); +}); diff --git a/projects/adyen-payments/src/lib/core/occ/adapters/occ-additionaldetails.adapter.ts b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-additionaldetails.adapter.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/occ/adapters/occ-additionaldetails.adapter.ts rename to projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-additionaldetails.adapter.ts diff --git a/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-adyen-order.adapter.spec.ts b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-adyen-order.adapter.spec.ts new file mode 100644 index 0000000..720898b --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-adyen-order.adapter.spec.ts @@ -0,0 +1,78 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { OccAdyenOrderAdapter } from './occ-adyen-order.adapter'; +import { OccEndpointsService } from '@spartacus/core'; +import { PlaceOrderRequest, PlaceOrderResponse } from '../../models/occ.order.models'; + +describe('OccAdyenOrderAdapter', () => { + let adapter: OccAdyenOrderAdapter; + let httpMock: HttpTestingController; + let occEndpointsService: jasmine.SpyObj; + + beforeEach(() => { + const occEndpointsServiceSpy = jasmine.createSpyObj('OccEndpointsService', ['buildUrl']); + + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + OccAdyenOrderAdapter, + { provide: OccEndpointsService, useValue: occEndpointsServiceSpy } + ] + }); + + adapter = TestBed.inject(OccAdyenOrderAdapter); + httpMock = TestBed.inject(HttpTestingController); + occEndpointsService = TestBed.inject(OccEndpointsService) as jasmine.SpyObj; + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(adapter).toBeTruthy(); + }); + + it('should call placeOrder and return PlaceOrderResponse', () => { + const userId = 'testUser'; + const cartId = 'testCart'; + const orderData: PlaceOrderRequest = { + paymentRequest: { /* mock payment request data */ } + }; + const mockResponse: PlaceOrderResponse = { + success: true, + executeAction: false, + paymentsAction: undefined, + error: undefined, + errorFieldCodes: [], + orderNumber: '12345', + orderData: { /* mock order data */ } + }; + + occEndpointsService.buildUrl.and.returnValue(`users/${userId}/carts/${cartId}/adyen/place-order`); + + adapter.placeOrder(userId, cartId, orderData).subscribe(response => { + expect(response).toEqual(mockResponse); + }); + + const req = httpMock.expectOne(`users/${userId}/carts/${cartId}/adyen/place-order`); + expect(req.request.method).toBe('POST'); + req.flush(mockResponse); + }); + + it('should call cancelPayment and return void', () => { + const userId = 'testUser'; + const cartId = 'testCart'; + const orderCode = 'order123'; + + occEndpointsService.buildUrl.and.returnValue(`users/${userId}/adyen/payment-canceled/${orderCode}`); + + adapter.cancelPayment(userId, cartId, orderCode).subscribe(response => { + expect(response).toBeUndefined(); + }); + + const req = httpMock.expectOne(`users/${userId}/adyen/payment-canceled/${orderCode}`); + expect(req.request.method).toBe('POST'); + req.flush(null); + }); +}); diff --git a/projects/adyen-payments/src/lib/core/occ/adapters/occ-adyen-order.adapter.ts b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-adyen-order.adapter.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/occ/adapters/occ-adyen-order.adapter.ts rename to projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-adyen-order.adapter.ts diff --git a/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-checkout-config.adapter.spec.ts b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-checkout-config.adapter.spec.ts new file mode 100644 index 0000000..7b54a0a --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-checkout-config.adapter.spec.ts @@ -0,0 +1,83 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { OccCheckoutConfigAdapter } from './occ-checkout-config.adapter'; +import { OccEndpointsService } from '@spartacus/core'; +import { AdyenConfigData } from '../../models/occ.config.models'; + +describe('OccCheckoutConfigAdapter', () => { + let adapter: OccCheckoutConfigAdapter; + let httpMock: HttpTestingController; + let occEndpointsService: jasmine.SpyObj; + + beforeEach(() => { + const occEndpointsServiceSpy = jasmine.createSpyObj('OccEndpointsService', ['buildUrl']); + + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + OccCheckoutConfigAdapter, + { provide: OccEndpointsService, useValue: occEndpointsServiceSpy } + ] + }); + + adapter = TestBed.inject(OccCheckoutConfigAdapter); + httpMock = TestBed.inject(HttpTestingController); + occEndpointsService = TestBed.inject(OccEndpointsService) as jasmine.SpyObj; + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(adapter).toBeTruthy(); + }); + + it('should call getCheckoutConfiguration and return AdyenConfigData', () => { + const userId = 'testUser'; + const cartId = 'testCart'; + const mockResponse: AdyenConfigData = { + paymentMethods: [], + connectedTerminalList: [], + storedPaymentMethodList: [], + issuerLists: new Map(), + creditCardLabel: 'Mock Credit Card Label', + allowedCards: [], + amount: { + value: 1000, + currency: 'USD' + }, + adyenClientKey: 'mockClientKey', + adyenPaypalMerchantId: 'mockPaypalMerchantId', + deviceFingerPrintUrl: 'https://mock.device.fingerprint.url', + sessionData: { + id: 'mockSessionId', + sessionData: 'mockSessionData' + }, + selectedPaymentMethod: 'mockPaymentMethod', + showRememberTheseDetails: true, + checkoutShopperHost: 'https://mock.checkout.shopper.host', + environmentMode: 'test', + shopperLocale: 'en-US', + openInvoiceMethods: [], + showSocialSecurityNumber: false, + showBoleto: false, + showComboCard: false, + showPos: false, + immediateCapture: false, + countryCode: 'US', + cardHolderNameRequired: true, + sepaDirectDebit: false + }; + + occEndpointsService.buildUrl.and.returnValue(`users/${userId}/carts/${cartId}/adyen/checkout-configuration`); + + adapter.getCheckoutConfiguration(userId, cartId).subscribe(response => { + expect(response).toEqual(mockResponse); + }); + + const req = httpMock.expectOne(`users/${userId}/carts/${cartId}/adyen/checkout-configuration`); + expect(req.request.method).toBe('GET'); + req.flush(mockResponse); + }); +}); diff --git a/projects/adyen-payments/src/lib/core/occ/adapters/occ-checkout-config.adapter.ts b/projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-checkout-config.adapter.ts similarity index 100% rename from projects/adyen-payments/src/lib/core/occ/adapters/occ-checkout-config.adapter.ts rename to projects/adyen/adyen-spartacus/src/core/occ/adapters/occ-checkout-config.adapter.ts diff --git a/projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.listener.spec.ts b/projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.listener.spec.ts new file mode 100644 index 0000000..807dc01 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.listener.spec.ts @@ -0,0 +1,46 @@ +import { TestBed } from '@angular/core/testing'; +import { CheckoutAdyenEventListener } from './checkout-adyen-event.listener'; +import { EventService, LanguageSetEvent, CurrencySetEvent } from '@spartacus/core'; +import { CheckoutAdyenConfigurationReloadEvent } from './checkout-adyen.events'; +import { of } from 'rxjs'; + +describe('CheckoutAdyenEventListener', () => { + let eventListener: CheckoutAdyenEventListener; + let eventService: jasmine.SpyObj; + + beforeEach(() => { + const eventServiceSpy = jasmine.createSpyObj('EventService', ['get', 'dispatch']); + + TestBed.configureTestingModule({ + providers: [ + CheckoutAdyenEventListener, + { provide: EventService, useValue: eventServiceSpy } + ] + }); + + eventListener = TestBed.inject(CheckoutAdyenEventListener); + eventService = TestBed.inject(EventService) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(eventListener).toBeTruthy(); + }); + + it('should subscribe to LanguageSetEvent and CurrencySetEvent and dispatch CheckoutAdyenConfigurationReloadEvent', () => { + eventService.get.withArgs(LanguageSetEvent).and.callFake(() => of(new LanguageSetEvent()) as any); + eventService.get.withArgs(CurrencySetEvent).and.callFake(() => of(new CurrencySetEvent()) as any); + eventListener['onCheckoutAdyenConfigurationReload'](); + + expect(eventService.get).toHaveBeenCalledWith(LanguageSetEvent); + expect(eventService.get).toHaveBeenCalledWith(CurrencySetEvent); + expect(eventService.dispatch).toHaveBeenCalledWith(jasmine.any(CheckoutAdyenConfigurationReloadEvent)); + }); + + it('should unsubscribe on destroy', () => { + spyOn(eventListener['subscriptions'], 'unsubscribe'); + + eventListener.ngOnDestroy(); + + expect(eventListener['subscriptions'].unsubscribe).toHaveBeenCalled(); + }); +}); diff --git a/projects/adyen-payments/src/lib/events/checkout-adyen-event.listener.ts b/projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.listener.ts similarity index 100% rename from projects/adyen-payments/src/lib/events/checkout-adyen-event.listener.ts rename to projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.listener.ts diff --git a/projects/adyen-payments/src/lib/events/checkout-adyen-event.module.ts b/projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/events/checkout-adyen-event.module.ts rename to projects/adyen/adyen-spartacus/src/events/checkout-adyen-event.module.ts diff --git a/projects/adyen-payments/src/lib/events/checkout-adyen.events.ts b/projects/adyen/adyen-spartacus/src/events/checkout-adyen.events.ts similarity index 100% rename from projects/adyen-payments/src/lib/events/checkout-adyen.events.ts rename to projects/adyen/adyen-spartacus/src/events/checkout-adyen.events.ts diff --git a/projects/adyen-payments/src/lib/facade/checkout-adyen-configuration.facade.ts b/projects/adyen/adyen-spartacus/src/facade/checkout-adyen-configuration.facade.ts similarity index 100% rename from projects/adyen-payments/src/lib/facade/checkout-adyen-configuration.facade.ts rename to projects/adyen/adyen-spartacus/src/facade/checkout-adyen-configuration.facade.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/connector/order-payment-status.connector.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/connector/order-payment-status.connector.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/connector/order-payment-status.connector.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/connector/order-payment-status.connector.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/fail/order-confirmation-icon-fail.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/success/order-confirmation-icon-success.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/icons/timeout/order-confirmation-icon-timeout.ts diff --git a/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.spec.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.spec.ts new file mode 100644 index 0000000..146d3b5 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.spec.ts @@ -0,0 +1,51 @@ +import { TestBed } from '@angular/core/testing'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { OccOrderStatusAdapter } from './occ-order-status.adapter'; +import { OccEndpointsService } from '@spartacus/core'; + +describe('OccOrderStatusAdapter', () => { + let adapter: OccOrderStatusAdapter; + let httpMock: HttpTestingController; + let occEndpointsService: jasmine.SpyObj; + + beforeEach(() => { + const occEndpointsServiceSpy = jasmine.createSpyObj('OccEndpointsService', ['buildUrl']); + + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule], + providers: [ + OccOrderStatusAdapter, + { provide: OccEndpointsService, useValue: occEndpointsServiceSpy } + ] + }); + + adapter = TestBed.inject(OccOrderStatusAdapter); + httpMock = TestBed.inject(HttpTestingController); + occEndpointsService = TestBed.inject(OccEndpointsService) as jasmine.SpyObj; + }); + + afterEach(() => { + httpMock.verify(); + }); + + it('should be created', () => { + expect(adapter).toBeTruthy(); + }); + + it('should get order payment status', () => { + const mockUserId = 'testUser'; + const mockOrderCode = 'testOrder'; + const mockStatus = 'completed'; + const mockUrl = `users/${mockUserId}/adyen/payment-status/${mockOrderCode}`; + + occEndpointsService.buildUrl.and.returnValue(mockUrl); + + adapter.getOrderPaymentStatus(mockUserId, mockOrderCode).subscribe((status) => { + expect(status).toBe(mockStatus); + }); + + const req = httpMock.expectOne(mockUrl); + expect(req.request.method).toBe('GET'); + req.flush(mockStatus); + }); +}); diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/occ/occ-order-status.adapter.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.html diff --git a/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.spec.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.spec.ts new file mode 100644 index 0000000..0d38051 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.spec.ts @@ -0,0 +1,67 @@ +import { TestBed, ComponentFixture, fakeAsync, tick } from '@angular/core/testing'; +import { OrderConfirmationPaymentStatusComponent } from './order-confirmation-payment-status.component'; +import { OrderPaymentStatusService } from './service/order-payment-status.service'; +import { AdyenOrderService } from '../../../../service/adyen-order.service'; +import { BehaviorSubject, of, timer } from 'rxjs'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; + +describe('OrderConfirmationPaymentStatusComponent', () => { + let component: OrderConfirmationPaymentStatusComponent; + let fixture: ComponentFixture; + let orderPaymentStatusService: jasmine.SpyObj; + let adyenOrderService: jasmine.SpyObj; + + beforeEach(() => { + const orderPaymentStatusServiceSpy = jasmine.createSpyObj('OrderPaymentStatusService', ['getOrderStatus']); + const adyenOrderServiceSpy = jasmine.createSpyObj('AdyenOrderService', ['getOrderDetails']); + + TestBed.configureTestingModule({ + declarations: [OrderConfirmationPaymentStatusComponent], + providers: [ + { provide: OrderPaymentStatusService, useValue: orderPaymentStatusServiceSpy }, + { provide: AdyenOrderService, useValue: adyenOrderServiceSpy } + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + + orderPaymentStatusService = TestBed.inject(OrderPaymentStatusService) as jasmine.SpyObj; + adyenOrderService = TestBed.inject(AdyenOrderService) as jasmine.SpyObj; + + adyenOrderService.getOrderDetails.and.returnValue(of({ code: '12345' })); + + fixture = TestBed.createComponent(OrderConfirmationPaymentStatusComponent); + component = fixture.componentInstance; + + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should initialize paymentStatus$ with "waiting"', () => { + component.ngOnInit(); + expect(component.paymentStatus$.value).toBe('waiting'); + }); + + it('should call getOrderStatus and update paymentStatus$', fakeAsync(() => { + orderPaymentStatusService.getOrderStatus.and.returnValue(of('completed')); + component.ngOnInit(); + tick(5000); // Simulate timer delay + expect(orderPaymentStatusService.getOrderStatus).toHaveBeenCalledWith('12345'); + expect(component.paymentStatus$.value).toBe('completed'); + })); + + it('should unsubscribe from timer on destroy', () => { + component.ngOnInit(); + //spyOn(component.timer, 'unsubscribe'); + component.ngOnDestroy(); + //expect(component.timer.unsubscribe).toHaveBeenCalled(); + }); + + it('should set paymentStatus$ to "timeout" after max retries', fakeAsync(() => { + orderPaymentStatusService.getOrderStatus.and.returnValue(of('waiting')); + component.ngOnInit(); + tick(150000); // Simulate max retries (30 * 5000ms) + expect(component.paymentStatus$.value).toBe('timeout'); + })); +}); diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.module.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.module.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.module.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.scss b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.scss similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.scss rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.scss diff --git a/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.spec.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.spec.ts new file mode 100644 index 0000000..49f04f3 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.spec.ts @@ -0,0 +1,51 @@ +import { TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { OrderPaymentStatusService } from './order-payment-status.service'; +import { UserIdService, QueryService } from '@spartacus/core'; +import { OrderPaymentStatusConnector } from '../connector/order-payment-status.connector'; + +describe('OrderPaymentStatusService', () => { + let service: OrderPaymentStatusService; + let userIdService: jasmine.SpyObj; + let orderPaymentStatusConnector: jasmine.SpyObj; + + beforeEach(() => { + const userIdServiceSpy = jasmine.createSpyObj('UserIdService', ['takeUserId']); + const orderPaymentStatusConnectorSpy = jasmine.createSpyObj('OrderPaymentStatusConnector', ['getOrderStatus']); + + TestBed.configureTestingModule({ + providers: [ + OrderPaymentStatusService, + { provide: UserIdService, useValue: userIdServiceSpy }, + { provide: OrderPaymentStatusConnector, useValue: orderPaymentStatusConnectorSpy }, + { provide: QueryService, useValue: {} } + ] + }); + + service = TestBed.inject(OrderPaymentStatusService); + userIdService = TestBed.inject(UserIdService) as jasmine.SpyObj; + orderPaymentStatusConnector = TestBed.inject(OrderPaymentStatusConnector) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should return order status', (done: DoneFn) => { + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000; + const mockUserId = 'testUser'; + const mockOrderCode = 'testOrder'; + const mockOrderStatus = 'completed'; + + userIdService.takeUserId.and.returnValue(of(mockUserId)); + orderPaymentStatusConnector.getOrderStatus.and.returnValue(of(mockOrderStatus)); + + service.getOrderStatus(mockOrderCode).subscribe((status) => { + expect(status).toBe(mockOrderStatus); + done(); + }); + + expect(userIdService.takeUserId).toHaveBeenCalled(); + expect(orderPaymentStatusConnector.getOrderStatus).toHaveBeenCalledWith(mockUserId, mockOrderCode); + }); +}); diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/service/order-payment-status.service.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.scss b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.scss similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.scss rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.scss diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/spinner/order-confirmation-payment-status-spinner.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/failed/order-confirmation-status-failed.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/order-confirmation-payment-statuses.scss b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/order-confirmation-payment-statuses.scss similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/order-confirmation-payment-statuses.scss rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/order-confirmation-payment-statuses.scss diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/pending/order-confirmation-status-pending.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/rejected/order-confirmation-status-rejected.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/success/order-confirmation-status-success.ts diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.html b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.html similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.html rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.html diff --git a/projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.ts b/projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.ts similarity index 100% rename from projects/adyen-payments/src/lib/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.ts rename to projects/adyen/adyen-spartacus/src/order/components/order-confirmation/order-confirmation-payment-status/statuses/timeout/order-confirmation-status-timeout.ts diff --git a/projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.css b/projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.css similarity index 100% rename from projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.css rename to projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.css diff --git a/projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.html b/projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.html similarity index 100% rename from projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.html rename to projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.html diff --git a/projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.spec.ts b/projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.spec.ts similarity index 100% rename from projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.spec.ts rename to projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.spec.ts diff --git a/projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.ts b/projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.ts similarity index 100% rename from projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.component.ts rename to projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.component.ts diff --git a/projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.module.ts b/projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/product/components/express-checkout-product/express-checkout-product.module.ts rename to projects/adyen/adyen-spartacus/src/product/components/express-checkout-product/express-checkout-product.module.ts diff --git a/projects/adyen/adyen-spartacus/src/public-api.ts b/projects/adyen/adyen-spartacus/src/public-api.ts new file mode 100644 index 0000000..57ae7c5 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/public-api.ts @@ -0,0 +1,11 @@ +/* + * Public API Surface of adyen-payments + */ + +export * from './adyen-payments.module'; +export * from './root/checkout-adyen-root.module'; +export * from './checkout-adyen-payment-method/checkout-adyen-payment-method.component'; +export * from './order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.module'; +export * from './order/components/order-confirmation/order-confirmation-payment-status/order-confirmation-payment-status.component'; +export * from './service/adyen-order.service'; + diff --git a/projects/adyen-payments/src/lib/root/checkout-adyen-root.module.ts b/projects/adyen/adyen-spartacus/src/root/checkout-adyen-root.module.ts similarity index 100% rename from projects/adyen-payments/src/lib/root/checkout-adyen-root.module.ts rename to projects/adyen/adyen-spartacus/src/root/checkout-adyen-root.module.ts diff --git a/projects/adyen/adyen-spartacus/src/service/adyen-address.service.spec.ts b/projects/adyen/adyen-spartacus/src/service/adyen-address.service.spec.ts new file mode 100644 index 0000000..5253799 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/service/adyen-address.service.spec.ts @@ -0,0 +1,62 @@ +import { TestBed } from '@angular/core/testing'; +import { of, Observable } from 'rxjs'; +import { AdyenAddressService } from './adyen-address.service'; +import { UserAddressConnector, UserIdService, CommandService, Address } from '@spartacus/core'; +import { ActiveCartFacade } from '@spartacus/cart/base/root'; + +describe('AdyenAddressService', () => { + let service: AdyenAddressService; + let userAddressConnector: jasmine.SpyObj; + let userIdService: jasmine.SpyObj; + let commandService: jasmine.SpyObj; + let activeCartFacade: jasmine.SpyObj; + + beforeEach(() => { + const userAddressConnectorSpy = jasmine.createSpyObj('UserAddressConnector', ['add']); + const userIdServiceSpy = jasmine.createSpyObj('UserIdService', ['getUserId']); + const commandServiceSpy = jasmine.createSpyObj('CommandService', ['create']); + const activeCartFacadeSpy = jasmine.createSpyObj('ActiveCartFacade', ['getActiveCartId']); + + TestBed.configureTestingModule({ + providers: [ + AdyenAddressService, + { provide: UserAddressConnector, useValue: userAddressConnectorSpy }, + { provide: UserIdService, useValue: userIdServiceSpy }, + { provide: CommandService, useValue: commandServiceSpy }, + { provide: ActiveCartFacade, useValue: activeCartFacadeSpy } + ] + }); + + service = TestBed.inject(AdyenAddressService); + userAddressConnector = TestBed.inject(UserAddressConnector) as jasmine.SpyObj; + userIdService = TestBed.inject(UserIdService) as jasmine.SpyObj; + commandService = TestBed.inject(CommandService) as jasmine.SpyObj; + activeCartFacade = TestBed.inject(ActiveCartFacade) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + +/* it('should add user address', (done: DoneFn) => { + const mockUserId = 'testUser'; + const mockAddress: Address = { id: 'testAddress' } as Address; + const mockResponse: Address = { id: 'responseAddress' } as Address; + + userIdService.getUserId.and.returnValue(of(mockUserId)); + userAddressConnector.add.and.returnValue(of(mockResponse)); + commandService.create.and.callFake((fn: (address: Address) => Observable
) => { + return { + execute: (billingAddress: Address) => fn(billingAddress) + }; + }); + + service.adyenAddUserAddress(mockAddress).subscribe((response) => { + expect(response).toBe(mockResponse); + done(); + }); + + expect(userIdService.getUserId).toHaveBeenCalled(); + expect(userAddressConnector.add).toHaveBeenCalledWith(mockUserId, mockAddress); + });*/ +}); diff --git a/projects/adyen-payments/src/lib/service/adyen-address.service.ts b/projects/adyen/adyen-spartacus/src/service/adyen-address.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/service/adyen-address.service.ts rename to projects/adyen/adyen-spartacus/src/service/adyen-address.service.ts diff --git a/projects/adyen-payments/src/lib/service/adyen-base.service.ts b/projects/adyen/adyen-spartacus/src/service/adyen-base.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/service/adyen-base.service.ts rename to projects/adyen/adyen-spartacus/src/service/adyen-base.service.ts diff --git a/projects/adyen/adyen-spartacus/src/service/adyen-order.service.spec.ts b/projects/adyen/adyen-spartacus/src/service/adyen-order.service.spec.ts new file mode 100644 index 0000000..bde1478 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/service/adyen-order.service.spec.ts @@ -0,0 +1,107 @@ +import { TestBed } from '@angular/core/testing'; +import { of, throwError } from 'rxjs'; +import { AdyenOrderService } from './adyen-order.service'; +import { UserIdService, CommandService, GlobalMessageService, GlobalMessageType, TranslationService, EventService, Address } from '@spartacus/core'; +import { OrderConnector, OrderHistoryConnector } from '@spartacus/order/core'; +import { ActiveCartFacade } from '@spartacus/cart/base/root'; +import { AdyenOrderConnector } from '../core/connectors/adyen-order-connector.service'; +import { AdditionalDetailsConnector } from '../core/connectors/additional-details.connector'; +import { HttpErrorResponse } from '@angular/common/http'; + +describe('AdyenOrderService', () => { + let service: AdyenOrderService; + let userIdService: jasmine.SpyObj; + let commandService: jasmine.SpyObj; + let globalMessageService: jasmine.SpyObj; + let translationService: jasmine.SpyObj; + let eventService: jasmine.SpyObj; + let orderConnector: jasmine.SpyObj; + let orderHistoryConnector: jasmine.SpyObj; + let activeCartFacade: jasmine.SpyObj; + let placeOrderConnector: jasmine.SpyObj; + let additionalDetailsConnector: jasmine.SpyObj; + + beforeEach(() => { + const userIdServiceSpy = jasmine.createSpyObj('UserIdService', ['takeUserId']); + const commandServiceSpy = jasmine.createSpyObj('CommandService', ['create']); + const globalMessageServiceSpy = jasmine.createSpyObj('GlobalMessageService', ['add']); + const translationServiceSpy = jasmine.createSpyObj('TranslationService', ['translate']); + const eventServiceSpy = jasmine.createSpyObj('EventService', ['dispatch']); + const orderConnectorSpy = jasmine.createSpyObj('OrderConnector', ['']); + const orderHistoryConnectorSpy = jasmine.createSpyObj('OrderHistoryConnector', ['get']); + const activeCartFacadeSpy = jasmine.createSpyObj('ActiveCartFacade', ['takeActiveCartId', 'isGuestCart']); + const placeOrderConnectorSpy = jasmine.createSpyObj('AdyenOrderConnector', ['placeOrder', 'paymentCanceled']); + const additionalDetailsConnectorSpy = jasmine.createSpyObj('AdditionalDetailsConnector', ['sendAdditionalDetails']); + + TestBed.configureTestingModule({ + providers: [ + AdyenOrderService, + { provide: UserIdService, useValue: userIdServiceSpy }, + { provide: CommandService, useValue: commandServiceSpy }, + { provide: GlobalMessageService, useValue: globalMessageServiceSpy }, + { provide: TranslationService, useValue: translationServiceSpy }, + { provide: EventService, useValue: eventServiceSpy }, + { provide: OrderConnector, useValue: orderConnectorSpy }, + { provide: OrderHistoryConnector, useValue: orderHistoryConnectorSpy }, + { provide: ActiveCartFacade, useValue: activeCartFacadeSpy }, + { provide: AdyenOrderConnector, useValue: placeOrderConnectorSpy }, + { provide: AdditionalDetailsConnector, useValue: additionalDetailsConnectorSpy } + ] + }); + + service = TestBed.inject(AdyenOrderService); + userIdService = TestBed.inject(UserIdService) as jasmine.SpyObj; + commandService = TestBed.inject(CommandService) as jasmine.SpyObj; + globalMessageService = TestBed.inject(GlobalMessageService) as jasmine.SpyObj; + translationService = TestBed.inject(TranslationService) as jasmine.SpyObj; + eventService = TestBed.inject(EventService) as jasmine.SpyObj; + orderConnector = TestBed.inject(OrderConnector) as jasmine.SpyObj; + orderHistoryConnector = TestBed.inject(OrderHistoryConnector) as jasmine.SpyObj; + activeCartFacade = TestBed.inject(ActiveCartFacade) as jasmine.SpyObj; + placeOrderConnector = TestBed.inject(AdyenOrderConnector) as jasmine.SpyObj; + additionalDetailsConnector = TestBed.inject(AdditionalDetailsConnector) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + + it('should place order successfully', (done: DoneFn) => { + const mockUserId = 'testUser'; + const mockCartId = 'testCart'; + const mockPaymentData = {}; + const mockBillingAddress = { id: 'testAddress' } as Address; + const mockResponse = { orderData: {}, orderNumber: '12345', success: true }; + + userIdService.takeUserId.and.returnValue(of(mockUserId)); + activeCartFacade.takeActiveCartId.and.returnValue(of(mockCartId)); + activeCartFacade.isGuestCart.and.returnValue(of(false)); + placeOrderConnector.placeOrder.and.returnValue(of(mockResponse)); + + service.adyenPlaceOrder(mockPaymentData, mockBillingAddress).subscribe((response) => { + expect(response).toEqual(mockResponse); + expect(eventService.dispatch).toHaveBeenCalled(); + done(); + }); + }); + + it('should handle place order error', (done: DoneFn) => { + const mockUserId = 'testUser'; + const mockCartId = 'testCart'; + const mockPaymentData = {}; + const mockBillingAddress = { id: 'testAddress' } as Address; + const mockError = new HttpErrorResponse({ error: { errorCode: 'ERROR_CODE', invalidFields: [] } }); + + userIdService.takeUserId.and.returnValue(of(mockUserId)); + activeCartFacade.takeActiveCartId.and.returnValue(of(mockCartId)); + activeCartFacade.isGuestCart.and.returnValue(of(false)); + placeOrderConnector.placeOrder.and.returnValue(throwError(mockError)); + translationService.translate.and.returnValue(of('Translated error message')); + + service.adyenPlaceOrder(mockPaymentData, mockBillingAddress).subscribe((response) => { + expect(response.success).toBeFalse(); + expect(globalMessageService.add).toHaveBeenCalledWith('Translated error message', GlobalMessageType.MSG_TYPE_ERROR, 20000); + done(); + }); + }); +}); diff --git a/projects/adyen-payments/src/lib/service/adyen-order.service.ts b/projects/adyen/adyen-spartacus/src/service/adyen-order.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/service/adyen-order.service.ts rename to projects/adyen/adyen-spartacus/src/service/adyen-order.service.ts diff --git a/projects/adyen/adyen-spartacus/src/service/checkout-adyen-configuration.service.spec.ts b/projects/adyen/adyen-spartacus/src/service/checkout-adyen-configuration.service.spec.ts new file mode 100644 index 0000000..84dfc61 --- /dev/null +++ b/projects/adyen/adyen-spartacus/src/service/checkout-adyen-configuration.service.spec.ts @@ -0,0 +1,104 @@ +import { TestBed } from '@angular/core/testing'; +import { of } from 'rxjs'; +import { CheckoutAdyenConfigurationService } from './checkout-adyen-configuration.service'; +import { UserIdService, QueryService, LoginEvent, LogoutEvent, QueryState } from '@spartacus/core'; +import { CheckoutConfigurationConnector } from '../core/connectors/checkout-configuration.connector'; +import { CheckoutAdyenConfigurationReloadEvent } from '../events/checkout-adyen.events'; +import { AdyenConfigData } from '../core/models/occ.config.models'; +import { ActiveCartFacade } from '@spartacus/cart/base/root'; + +describe('CheckoutAdyenConfigurationService', () => { + let service: CheckoutAdyenConfigurationService; + let userIdService: jasmine.SpyObj; + let queryService: jasmine.SpyObj; + let activeCartFacade: jasmine.SpyObj; + let checkoutConfigurationConnector: jasmine.SpyObj; + + beforeEach(() => { + const userIdServiceSpy = jasmine.createSpyObj('UserIdService', ['takeUserId']); + const queryServiceSpy = jasmine.createSpyObj('QueryService', ['create']); + const activeCartFacadeSpy = jasmine.createSpyObj('ActiveCartFacade', ['getActiveCartId']); + const checkoutConfigurationConnectorSpy = jasmine.createSpyObj('CheckoutConfigurationConnector', ['getCheckoutConfiguration']); + + TestBed.configureTestingModule({ + providers: [ + CheckoutAdyenConfigurationService, + { provide: UserIdService, useValue: userIdServiceSpy }, + { provide: QueryService, useValue: queryServiceSpy }, + { provide: ActiveCartFacade, useValue: activeCartFacadeSpy }, + { provide: CheckoutConfigurationConnector, useValue: checkoutConfigurationConnectorSpy } + ] + }); + + service = TestBed.inject(CheckoutAdyenConfigurationService); + userIdService = TestBed.inject(UserIdService) as jasmine.SpyObj; + queryService = TestBed.inject(QueryService) as jasmine.SpyObj; + activeCartFacade = TestBed.inject(ActiveCartFacade) as jasmine.SpyObj; + checkoutConfigurationConnector = TestBed.inject(CheckoutConfigurationConnector) as jasmine.SpyObj; + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); + +/* it('should get checkout configuration state', () => { + const mockState: QueryState = { loading: false, error: false, data: {} as AdyenConfigData }; + queryService.create.and.returnValue({ + getState: () => of(mockState) + }); + + service.getCheckoutConfigurationState().subscribe((state) => { + expect(state).toEqual(mockState); + }); + + expect(queryService.create).toHaveBeenCalled(); + });*/ + + it('should fetch checkout configuration', (done: DoneFn) => { + const mockUserId = 'testUser'; + const mockCartId = 'testCart'; + const mockConfigData: AdyenConfigData = { + paymentMethods: [], + connectedTerminalList: ['terminal1', 'terminal2'], + storedPaymentMethodList: [], + issuerLists: new Map([['issuer1', 'Issuer 1']]), + creditCardLabel: 'Credit Card', + allowedCards: [{ code: 'visa', type: 'Visa' }], + amount: { value: 1000, currency: 'USD' }, + adyenClientKey: 'testClientKey', + adyenPaypalMerchantId: 'testPaypalMerchantId', + deviceFingerPrintUrl: 'https://example.com/fingerprint', + sessionData: { id: 'sessionId', sessionData: 'sessionData' }, + selectedPaymentMethod: 'visa', + showRememberTheseDetails: true, + checkoutShopperHost: 'https://example.com/shopper', + environmentMode: 'test', + shopperLocale: 'en-US', + openInvoiceMethods: ['invoice'], + showSocialSecurityNumber: false, + showBoleto: false, + showComboCard: false, + showPos: true, + immediateCapture: false, + countryCode: 'US', + cardHolderNameRequired: true, + sepaDirectDebit: false + }; + + checkoutConfigurationConnector.getCheckoutConfiguration.and.returnValue(of(mockConfigData)); + + service.fetchCheckoutConfiguration(mockUserId, mockCartId).subscribe((configData) => { + expect(configData).toEqual(mockConfigData); + done(); + }); + + expect(checkoutConfigurationConnector.getCheckoutConfiguration).toHaveBeenCalledWith(mockUserId, mockCartId); + }); + + it('should reload on specific events', () => { + const reloadEvents = service['getCheckoutAdyenConfigurationLoadedEvents'](); + expect(reloadEvents).toContain(CheckoutAdyenConfigurationReloadEvent); + expect(reloadEvents).toContain(LoginEvent); + expect(reloadEvents).toContain(LogoutEvent); + }); +}); diff --git a/projects/adyen-payments/src/lib/service/checkout-adyen-configuration.service.ts b/projects/adyen/adyen-spartacus/src/service/checkout-adyen-configuration.service.ts similarity index 100% rename from projects/adyen-payments/src/lib/service/checkout-adyen-configuration.service.ts rename to projects/adyen/adyen-spartacus/src/service/checkout-adyen-configuration.service.ts diff --git a/projects/adyen-payments/tsconfig.lib.json b/projects/adyen/adyen-spartacus/tsconfig.lib.json similarity index 75% rename from projects/adyen-payments/tsconfig.lib.json rename to projects/adyen/adyen-spartacus/tsconfig.lib.json index 543fd47..879250d 100644 --- a/projects/adyen-payments/tsconfig.lib.json +++ b/projects/adyen/adyen-spartacus/tsconfig.lib.json @@ -1,8 +1,8 @@ /* To learn more about this file see: https://angular.io/config/tsconfig. */ { - "extends": "../../tsconfig.json", + "extends": "../../../tsconfig.json", "compilerOptions": { - "outDir": "../../out-tsc/lib", + "outDir": "../../../out-tsc/lib", "declaration": true, "declarationMap": true, "inlineSources": true, diff --git a/projects/adyen-payments/tsconfig.lib.prod.json b/projects/adyen/adyen-spartacus/tsconfig.lib.prod.json similarity index 100% rename from projects/adyen-payments/tsconfig.lib.prod.json rename to projects/adyen/adyen-spartacus/tsconfig.lib.prod.json diff --git a/projects/adyen-payments/tsconfig.schematics.json b/projects/adyen/adyen-spartacus/tsconfig.schematics.json similarity index 91% rename from projects/adyen-payments/tsconfig.schematics.json rename to projects/adyen/adyen-spartacus/tsconfig.schematics.json index ffd5c99..899c0ae 100644 --- a/projects/adyen-payments/tsconfig.schematics.json +++ b/projects/adyen/adyen-spartacus/tsconfig.schematics.json @@ -15,7 +15,7 @@ "noUnusedParameters": true, "noUnusedLocals": true, "rootDir": "schematics", - "outDir": "../../dist/adyen-payments/schematics", + "outDir": "../../../dist/adyen/adyen-spartacus/schematics", "skipDefaultLibCheck": true, "skipLibCheck": true, "sourceMap": true, diff --git a/projects/adyen-payments/tsconfig.spec.json b/projects/adyen/adyen-spartacus/tsconfig.spec.json similarity index 72% rename from projects/adyen-payments/tsconfig.spec.json rename to projects/adyen/adyen-spartacus/tsconfig.spec.json index ce7048b..80f875e 100644 --- a/projects/adyen-payments/tsconfig.spec.json +++ b/projects/adyen/adyen-spartacus/tsconfig.spec.json @@ -1,8 +1,8 @@ /* To learn more about this file see: https://angular.io/config/tsconfig. */ { - "extends": "../../tsconfig.json", + "extends": "../../../tsconfig.json", "compilerOptions": { - "outDir": "../../out-tsc/spec", + "outDir": "../../../out-tsc/spec", "types": [ "jasmine" ] diff --git a/projects/showcase/src/app/app.component.html b/projects/showcase/src/app/app.component.html new file mode 100644 index 0000000..1832abc --- /dev/null +++ b/projects/showcase/src/app/app.component.html @@ -0,0 +1 @@ + diff --git a/projects/showcase/src/app/app.component.scss b/projects/showcase/src/app/app.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/projects/showcase/src/app/app.component.spec.ts b/projects/showcase/src/app/app.component.spec.ts new file mode 100644 index 0000000..8d4f0b3 --- /dev/null +++ b/projects/showcase/src/app/app.component.spec.ts @@ -0,0 +1,31 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + AppComponent + ], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'adyendemostore'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('adyendemostore'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, adyendemostore'); + }); +}); diff --git a/projects/showcase/src/app/app.component.ts b/projects/showcase/src/app/app.component.ts new file mode 100644 index 0000000..0374321 --- /dev/null +++ b/projects/showcase/src/app/app.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrl: './app.component.scss' +}) +export class AppComponent { + title = 'adyendemostore'; +} diff --git a/projects/showcase/src/app/app.module.ts b/projects/showcase/src/app/app.module.ts new file mode 100644 index 0000000..2e1f728 --- /dev/null +++ b/projects/showcase/src/app/app.module.ts @@ -0,0 +1,24 @@ +import { provideHttpClient, withFetch, withInterceptorsFromDi } from "@angular/common/http"; +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; +import { EffectsModule } from "@ngrx/effects"; +import { StoreModule } from "@ngrx/store"; +import { AppRoutingModule } from "@spartacus/storefront"; +import { AppComponent } from './app.component'; +import { SpartacusModule } from './spartacus/spartacus.module'; + +@NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + StoreModule.forRoot({}), + AppRoutingModule, + EffectsModule.forRoot([]), + SpartacusModule + ], + providers: [provideHttpClient(withFetch(), withInterceptorsFromDi())], + bootstrap: [AppComponent] +}) +export class AppModule { } diff --git a/projects/showcase/src/app/spartacus/features/asm/asm-customer360-feature.module.ts b/projects/showcase/src/app/spartacus/features/asm/asm-customer360-feature.module.ts new file mode 100644 index 0000000..418ea31 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/asm/asm-customer360-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { asmCustomer360TranslationChunksConfig, asmCustomer360Translations } from "@spartacus/asm/customer-360/assets"; +import { AsmCustomer360RootModule, ASM_CUSTOMER_360_FEATURE } from "@spartacus/asm/customer-360/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + AsmCustomer360RootModule + ], + providers: [provideConfig({ + featureModules: { + [ASM_CUSTOMER_360_FEATURE]: { + module: () => + import('@spartacus/asm/customer-360').then((m) => m.AsmCustomer360Module), + }, + } + }), + provideConfig({ + i18n: { + resources: asmCustomer360Translations, + chunks: asmCustomer360TranslationChunksConfig, + }, + }) + ] +}) +export class AsmCustomer360FeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/asm/asm-feature.module.ts b/projects/showcase/src/app/spartacus/features/asm/asm-feature.module.ts new file mode 100644 index 0000000..b60f508 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/asm/asm-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { asmTranslationChunksConfig, asmTranslations } from "@spartacus/asm/assets"; +import { AsmRootModule, ASM_FEATURE } from "@spartacus/asm/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + AsmRootModule + ], + providers: [provideConfig({ + featureModules: { + [ASM_FEATURE]: { + module: () => + import('@spartacus/asm').then((m) => m.AsmModule), + }, + } + }), + provideConfig({ + i18n: { + resources: asmTranslations, + chunks: asmTranslationChunksConfig, + }, + }) + ] +}) +export class AsmFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/cart/cart-base-feature.module.ts b/projects/showcase/src/app/spartacus/features/cart/cart-base-feature.module.ts new file mode 100644 index 0000000..569e6a7 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/cart/cart-base-feature.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; +import { cartBaseTranslationChunksConfig, cartBaseTranslations } from "@spartacus/cart/base/assets"; +import { ADD_TO_CART_FEATURE, CartBaseRootModule, CART_BASE_FEATURE, MINI_CART_FEATURE } from "@spartacus/cart/base/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + CartBaseRootModule + ], + providers: [provideConfig({ + featureModules: { + [CART_BASE_FEATURE]: { + module: () => + import('@spartacus/cart/base').then((m) => m.CartBaseModule), + }, + } + }), + provideConfig({ + featureModules: { + [MINI_CART_FEATURE]: { + module: () => + import('@spartacus/cart/base/components/mini-cart').then((m) => m.MiniCartModule), + }, + } + }), + provideConfig({ + featureModules: { + [ADD_TO_CART_FEATURE]: { + module: () => + import('@spartacus/cart/base/components/add-to-cart').then((m) => m.AddToCartModule), + }, + } + }), + provideConfig({ + i18n: { + resources: cartBaseTranslations, + chunks: cartBaseTranslationChunksConfig, + }, + }) + ] +}) +export class CartBaseFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/cart/cart-import-export-feature.module.ts b/projects/showcase/src/app/spartacus/features/cart/cart-import-export-feature.module.ts new file mode 100644 index 0000000..df13b7d --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/cart/cart-import-export-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { importExportTranslationChunksConfig, importExportTranslations } from "@spartacus/cart/import-export/assets"; +import { CART_IMPORT_EXPORT_FEATURE, ImportExportRootModule } from "@spartacus/cart/import-export/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + ImportExportRootModule + ], + providers: [provideConfig({ + featureModules: { + [CART_IMPORT_EXPORT_FEATURE]: { + module: () => + import('@spartacus/cart/import-export').then((m) => m.ImportExportModule), + }, + } + }), + provideConfig({ + i18n: { + resources: importExportTranslations, + chunks: importExportTranslationChunksConfig, + }, + }) + ] +}) +export class CartImportExportFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/cart/cart-quick-order-feature.module.ts b/projects/showcase/src/app/spartacus/features/cart/cart-quick-order-feature.module.ts new file mode 100644 index 0000000..832a959 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/cart/cart-quick-order-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { quickOrderTranslationChunksConfig, quickOrderTranslations } from "@spartacus/cart/quick-order/assets"; +import { CART_QUICK_ORDER_FEATURE, QuickOrderRootModule } from "@spartacus/cart/quick-order/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + QuickOrderRootModule + ], + providers: [provideConfig({ + featureModules: { + [CART_QUICK_ORDER_FEATURE]: { + module: () => + import('@spartacus/cart/quick-order').then((m) => m.QuickOrderModule), + }, + } + }), + provideConfig({ + i18n: { + resources: quickOrderTranslations, + chunks: quickOrderTranslationChunksConfig, + }, + }) + ] +}) +export class CartQuickOrderFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/cart/cart-saved-cart-feature.module.ts b/projects/showcase/src/app/spartacus/features/cart/cart-saved-cart-feature.module.ts new file mode 100644 index 0000000..a05b787 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/cart/cart-saved-cart-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { savedCartTranslationChunksConfig, savedCartTranslations } from "@spartacus/cart/saved-cart/assets"; +import { CART_SAVED_CART_FEATURE, SavedCartRootModule } from "@spartacus/cart/saved-cart/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + SavedCartRootModule + ], + providers: [provideConfig({ + featureModules: { + [CART_SAVED_CART_FEATURE]: { + module: () => + import('@spartacus/cart/saved-cart').then((m) => m.SavedCartModule), + }, + } + }), + provideConfig({ + i18n: { + resources: savedCartTranslations, + chunks: savedCartTranslationChunksConfig, + }, + }) + ] +}) +export class CartSavedCartFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/cart/wish-list-feature.module.ts b/projects/showcase/src/app/spartacus/features/cart/wish-list-feature.module.ts new file mode 100644 index 0000000..f23e8f7 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/cart/wish-list-feature.module.ts @@ -0,0 +1,35 @@ +import { NgModule } from '@angular/core'; +import { wishListTranslationChunksConfig, wishListTranslations } from "@spartacus/cart/wish-list/assets"; +import { ADD_TO_WISHLIST_FEATURE, CART_WISH_LIST_FEATURE, WishListRootModule } from "@spartacus/cart/wish-list/root"; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; + +@NgModule({ + declarations: [], + imports: [ + WishListRootModule + ], + providers: [provideConfig({ + featureModules: { + [CART_WISH_LIST_FEATURE]: { + module: () => + import('@spartacus/cart/wish-list').then((m) => m.WishListModule), + }, + } + }), + provideConfig({ + featureModules: { + [ADD_TO_WISHLIST_FEATURE]: { + module: () => + import('@spartacus/cart/wish-list/components/add-to-wishlist').then((m) => m.AddToWishListModule), + }, + } + }), + provideConfig({ + i18n: { + resources: wishListTranslations, + chunks: wishListTranslationChunksConfig, + }, + }) + ] +}) +export class WishListFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/checkout/checkout-feature.module.ts b/projects/showcase/src/app/spartacus/features/checkout/checkout-feature.module.ts new file mode 100644 index 0000000..3dc1c0a --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/checkout/checkout-feature.module.ts @@ -0,0 +1,107 @@ +import {NgModule} from '@angular/core'; +import {checkoutTranslationChunksConfig, checkoutTranslations} from "@spartacus/checkout/base/assets"; +import {CHECKOUT_CORE_FEATURE, CHECKOUT_FEATURE, CheckoutStepType} from "@spartacus/checkout/base/root"; +import {CmsConfig, I18nConfig, provideConfig,provideDefaultConfigFactory} from "@spartacus/core"; +import {AdyenPaymentsModule} from "@adyen/adyen-spartacus"; +import {CART_BASE_FEATURE} from '@spartacus/cart/base/root'; + + +export const CHECKOUT_BASE_CMS_COMPONENTS: string[] = [ + 'CheckoutOrchestrator', + 'CheckoutOrderSummary', + 'CheckoutProgress', + 'CheckoutProgressMobileBottom', + 'CheckoutProgressMobileTop', + 'CheckoutDeliveryMode', + 'CheckoutAdyenPaymentDetails', + 'CheckoutPlaceOrder', + 'CheckoutReviewOrder', + 'CheckoutReviewPayment', + 'CheckoutReviewShipping', + 'CheckoutReviewOverview', + 'CheckoutDeliveryAddress', + 'GuestCheckoutLoginComponent', +]; + +export function adyenCheckoutComponentsConfig() { + const config: CmsConfig = { + featureModules: { + [CHECKOUT_FEATURE]: { + cmsComponents: CHECKOUT_BASE_CMS_COMPONENTS, + dependencies: [CART_BASE_FEATURE], + }, + // by default core is bundled together with components + [CHECKOUT_CORE_FEATURE]: CHECKOUT_FEATURE, + }, + }; + return config; +} + +export const translationOverwrites = { + en: { // lang + checkout: { // chunk + checkoutProgress: { // keys (nested) + deliveryModePaymentDetails: 'Delivery Mode Payment Details', + }, + }, + }, +}; + +@NgModule({ + declarations: [], + imports: [ + AdyenPaymentsModule + ], + providers: [ + provideDefaultConfigFactory(adyenCheckoutComponentsConfig), + provideConfig({ + featureModules: { + [CHECKOUT_FEATURE]: { + module: () => + import('@spartacus/checkout/base').then((m) => m.CheckoutModule), + }, + } + }), + provideConfig({ + i18n: {resources: translationOverwrites}, + }), + provideConfig({ + i18n: { + resources: checkoutTranslations, + chunks: checkoutTranslationChunksConfig, + }, + routing: { + routes: { + // Add a new route for the combined step + checkoutAdyenPaymentDetails: { + paths: ['checkout/adyen-payment-details'], + }, + }, + }, + checkout: { + steps: [ + { + id: 'deliveryAddress', + name: 'checkoutProgress.deliveryAddress', + routeName: 'checkoutDeliveryAddress', + type: [CheckoutStepType.DELIVERY_ADDRESS], + }, + { + id: 'deliveryMode', + name: 'checkoutProgress.deliveryMode', + routeName: 'checkoutDeliveryMode', + type: [CheckoutStepType.DELIVERY_MODE], + }, + { + id: 'adyenPaymentDetails', + name: 'checkoutProgress.paymentDetails', + routeName: 'checkoutAdyenPaymentDetails', + type: [CheckoutStepType.PAYMENT_DETAILS], + }, + ], + }, + }) + ] +}) +export class CheckoutFeatureModule { +} diff --git a/projects/showcase/src/app/spartacus/features/order/order-feature.module.ts b/projects/showcase/src/app/spartacus/features/order/order-feature.module.ts new file mode 100644 index 0000000..8f3ed07 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/order/order-feature.module.ts @@ -0,0 +1,33 @@ +import {NgModule} from '@angular/core'; +import {CmsConfig, I18nConfig, provideConfig} from "@spartacus/core"; +import {orderTranslationChunksConfig, orderTranslations} from "@spartacus/order/assets"; +import {ORDER_FEATURE, OrderFacade, OrderRootModule} from "@spartacus/order/root"; +import {AdyenOrderService, OrderConfirmationPaymentStatusModule} from "@adyen/adyen-spartacus"; + +@NgModule({ + declarations: [], + imports: [ + OrderRootModule, + OrderConfirmationPaymentStatusModule + ], + providers: [provideConfig({ + featureModules: { + [ORDER_FEATURE]: { + module: () => + import('@spartacus/order').then((m) => m.OrderModule), + }, + } + }), + provideConfig({ + i18n: { + resources: orderTranslations, + chunks: orderTranslationChunksConfig, + }, + }), + { + provide: OrderFacade, + useExisting: AdyenOrderService, + } + ] +}) +export class OrderFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/product/product-image-zoom-feature.module.ts b/projects/showcase/src/app/spartacus/features/product/product-image-zoom-feature.module.ts new file mode 100644 index 0000000..20044d2 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/product/product-image-zoom-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; +import { productImageZoomTranslationChunksConfig, productImageZoomTranslations } from "@spartacus/product/image-zoom/assets"; +import { ProductImageZoomRootModule, PRODUCT_IMAGE_ZOOM_FEATURE } from "@spartacus/product/image-zoom/root"; + +@NgModule({ + declarations: [], + imports: [ + ProductImageZoomRootModule + ], + providers: [provideConfig({ + featureModules: { + [PRODUCT_IMAGE_ZOOM_FEATURE]: { + module: () => + import('@spartacus/product/image-zoom').then((m) => m.ProductImageZoomModule), + }, + } + }), + provideConfig({ + i18n: { + resources: productImageZoomTranslations, + chunks: productImageZoomTranslationChunksConfig, + }, + }) + ] +}) +export class ProductImageZoomFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/product/product-variants-feature.module.ts b/projects/showcase/src/app/spartacus/features/product/product-variants-feature.module.ts new file mode 100644 index 0000000..ab2382d --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/product/product-variants-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; +import { productVariantsTranslationChunksConfig, productVariantsTranslations } from "@spartacus/product/variants/assets"; +import { ProductVariantsRootModule, PRODUCT_VARIANTS_FEATURE } from "@spartacus/product/variants/root"; + +@NgModule({ + declarations: [], + imports: [ + ProductVariantsRootModule + ], + providers: [provideConfig({ + featureModules: { + [PRODUCT_VARIANTS_FEATURE]: { + module: () => + import('@spartacus/product/variants').then((m) => m.ProductVariantsModule), + }, + } + }), + provideConfig({ + i18n: { + resources: productVariantsTranslations, + chunks: productVariantsTranslationChunksConfig, + }, + }) + ] +}) +export class ProductVariantsFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/smartedit/smart-edit-feature.module.ts b/projects/showcase/src/app/spartacus/features/smartedit/smart-edit-feature.module.ts new file mode 100644 index 0000000..3dc7bd4 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/smartedit/smart-edit-feature.module.ts @@ -0,0 +1,26 @@ +import { NgModule } from '@angular/core'; +import { CmsConfig, provideConfig } from "@spartacus/core"; +import { SmartEditConfig, SmartEditRootModule, SMART_EDIT_FEATURE } from "@spartacus/smartedit/root"; + +@NgModule({ + declarations: [], + imports: [ + SmartEditRootModule + ], + providers: [provideConfig({ + featureModules: { + [SMART_EDIT_FEATURE]: { + module: () => + import('@spartacus/smartedit').then((m) => m.SmartEditModule), + }, + } + }), + provideConfig({ + smartEdit: { + storefrontPreviewRoute: 'STOREFRONT_PREVIEW_ROUTE_PLACEHOLDER', + allowOrigin: 'ALLOWED_ORIGIN_PLACEHOLDER', + }, + }) + ] +}) +export class SmartEditFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/storefinder/store-finder-feature.module.ts b/projects/showcase/src/app/spartacus/features/storefinder/store-finder-feature.module.ts new file mode 100644 index 0000000..1f4ff88 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/storefinder/store-finder-feature.module.ts @@ -0,0 +1,27 @@ +import { NgModule } from '@angular/core'; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; +import { storeFinderTranslationChunksConfig, storeFinderTranslations } from "@spartacus/storefinder/assets"; +import { StoreFinderRootModule, STORE_FINDER_FEATURE } from "@spartacus/storefinder/root"; + +@NgModule({ + declarations: [], + imports: [ + StoreFinderRootModule + ], + providers: [provideConfig({ + featureModules: { + [STORE_FINDER_FEATURE]: { + module: () => + import('@spartacus/storefinder').then((m) => m.StoreFinderModule), + }, + } + }), + provideConfig({ + i18n: { + resources: storeFinderTranslations, + chunks: storeFinderTranslationChunksConfig, + }, + }) + ] +}) +export class StoreFinderFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/tracking/personalization-feature.module.ts b/projects/showcase/src/app/spartacus/features/tracking/personalization-feature.module.ts new file mode 100644 index 0000000..1dc9c6c --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/tracking/personalization-feature.module.ts @@ -0,0 +1,19 @@ +import { NgModule } from '@angular/core'; +import { CmsConfig, provideConfig } from "@spartacus/core"; +import { PersonalizationRootModule, PERSONALIZATION_FEATURE } from "@spartacus/tracking/personalization/root"; + +@NgModule({ + declarations: [], + imports: [ + PersonalizationRootModule + ], + providers: [provideConfig({ + featureModules: { + [PERSONALIZATION_FEATURE]: { + module: () => + import('@spartacus/tracking/personalization').then((m) => m.PersonalizationModule), + }, + } + })] +}) +export class PersonalizationFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/features/user/user-feature.module.ts b/projects/showcase/src/app/spartacus/features/user/user-feature.module.ts new file mode 100644 index 0000000..4b07cd5 --- /dev/null +++ b/projects/showcase/src/app/spartacus/features/user/user-feature.module.ts @@ -0,0 +1,44 @@ +import { NgModule } from '@angular/core'; +import { CmsConfig, I18nConfig, provideConfig } from "@spartacus/core"; +import { userAccountTranslationChunksConfig, userAccountTranslations } from "@spartacus/user/account/assets"; +import { UserAccountRootModule, USER_ACCOUNT_FEATURE } from "@spartacus/user/account/root"; +import { userProfileTranslationChunksConfig, userProfileTranslations } from "@spartacus/user/profile/assets"; +import { UserProfileRootModule, USER_PROFILE_FEATURE } from "@spartacus/user/profile/root"; + +@NgModule({ + declarations: [], + imports: [ + UserAccountRootModule, + UserProfileRootModule + ], + providers: [provideConfig({ + featureModules: { + [USER_ACCOUNT_FEATURE]: { + module: () => + import('@spartacus/user/account').then((m) => m.UserAccountModule), + }, + } + }), + provideConfig({ + i18n: { + resources: userAccountTranslations, + chunks: userAccountTranslationChunksConfig, + }, + }), + provideConfig({ + featureModules: { + [USER_PROFILE_FEATURE]: { + module: () => + import('@spartacus/user/profile').then((m) => m.UserProfileModule), + }, + } + }), + provideConfig({ + i18n: { + resources: userProfileTranslations, + chunks: userProfileTranslationChunksConfig, + }, + }) + ] +}) +export class UserFeatureModule { } diff --git a/projects/showcase/src/app/spartacus/spartacus-configuration.module.ts b/projects/showcase/src/app/spartacus/spartacus-configuration.module.ts new file mode 100644 index 0000000..c7d1e05 --- /dev/null +++ b/projects/showcase/src/app/spartacus/spartacus-configuration.module.ts @@ -0,0 +1,30 @@ +import { NgModule } from '@angular/core'; +import { translationChunksConfig, translations } from "@spartacus/assets"; +import { FeaturesConfig, I18nConfig, OccConfig, provideConfig, SiteContextConfig } from "@spartacus/core"; +import { defaultCmsContentProviders, layoutConfig, mediaConfig } from "@spartacus/storefront"; + +@NgModule({ + declarations: [], + imports: [ + ], + providers: [provideConfig(layoutConfig), provideConfig(mediaConfig), ...defaultCmsContentProviders, provideConfig({ + backend: { + occ: { + baseUrl: 'https://localhost:9002', + } + }, + }), provideConfig({ + context: {}, + }), provideConfig({ + i18n: { + resources: translations, + chunks: translationChunksConfig, + fallbackLang: 'en' + }, + }), provideConfig({ + features: { + level: '2211.23' + } + })] +}) +export class SpartacusConfigurationModule { } diff --git a/projects/showcase/src/app/spartacus/spartacus-features.module.ts b/projects/showcase/src/app/spartacus/spartacus-features.module.ts new file mode 100644 index 0000000..ce7b372 --- /dev/null +++ b/projects/showcase/src/app/spartacus/spartacus-features.module.ts @@ -0,0 +1,88 @@ +import { NgModule } from '@angular/core'; +import { AnonymousConsentsModule, AuthModule, CostCenterOccModule, ExternalRoutesModule, ProductModule, ProductOccModule, UserModule, UserOccModule } from "@spartacus/core"; +import { AnonymousConsentManagementBannerModule, AnonymousConsentsDialogModule, BannerCarouselModule, BannerModule, BreadcrumbModule, CategoryNavigationModule, CmsParagraphModule, ConsentManagementModule, FooterNavigationModule, HamburgerMenuModule, HomePageEventModule, LinkModule, LoginRouteModule, LogoutModule, MyAccountV2Module, MyCouponsModule, MyInterestsModule, NavigationEventModule, NavigationModule, NotificationPreferenceModule, PageTitleModule, PaymentMethodsModule, PDFModule, ProductCarouselModule, ProductDetailsPageModule, ProductFacetNavigationModule, ProductImagesModule, ProductIntroModule, ProductListingPageModule, ProductListModule, ProductPageEventModule, ProductReferencesModule, ProductSummaryModule, ProductTabsModule, ScrollToTopModule, SearchBoxModule, SiteContextSelectorModule, StockNotificationModule, TabParagraphContainerModule, VideoModule } from "@spartacus/storefront"; +import { UserFeatureModule } from './features/user/user-feature.module'; +import { CartBaseFeatureModule } from './features/cart/cart-base-feature.module'; +import { CartSavedCartFeatureModule } from './features/cart/cart-saved-cart-feature.module'; +import { WishListFeatureModule } from './features/cart/wish-list-feature.module'; +import { CartQuickOrderFeatureModule } from './features/cart/cart-quick-order-feature.module'; +import { CartImportExportFeatureModule } from './features/cart/cart-import-export-feature.module'; +import { OrderFeatureModule } from './features/order/order-feature.module'; +import { CheckoutFeatureModule } from './features/checkout/checkout-feature.module'; +import { PersonalizationFeatureModule } from './features/tracking/personalization-feature.module'; +import { StoreFinderFeatureModule } from './features/storefinder/store-finder-feature.module'; +import { AsmFeatureModule } from './features/asm/asm-feature.module'; +import { AsmCustomer360FeatureModule } from './features/asm/asm-customer360-feature.module'; +import { SmartEditFeatureModule } from './features/smartedit/smart-edit-feature.module'; +import { ProductVariantsFeatureModule } from './features/product/product-variants-feature.module'; +import { ProductImageZoomFeatureModule } from './features/product/product-image-zoom-feature.module'; + +@NgModule({ + declarations: [], + imports: [ + AuthModule.forRoot(), + LogoutModule, + LoginRouteModule, + HamburgerMenuModule, + SiteContextSelectorModule, + LinkModule, + BannerModule, + CmsParagraphModule, + TabParagraphContainerModule, + BannerCarouselModule, + CategoryNavigationModule, + NavigationModule, + FooterNavigationModule, + BreadcrumbModule, + ScrollToTopModule, + PageTitleModule, + VideoModule, + PDFModule, + UserModule, + UserOccModule, + PaymentMethodsModule, + NotificationPreferenceModule, + MyInterestsModule, + MyAccountV2Module, + StockNotificationModule, + ConsentManagementModule, + MyCouponsModule, + AnonymousConsentsModule.forRoot(), + AnonymousConsentsDialogModule, + AnonymousConsentManagementBannerModule, + ProductModule.forRoot(), + ProductOccModule, + ProductDetailsPageModule, + ProductListingPageModule, + ProductListModule, + SearchBoxModule, + ProductFacetNavigationModule, + ProductTabsModule, + ProductCarouselModule, + ProductReferencesModule, + ProductImagesModule, + ProductSummaryModule, + ProductIntroModule, + CostCenterOccModule, + NavigationEventModule, + HomePageEventModule, + ProductPageEventModule, + ExternalRoutesModule.forRoot(), + UserFeatureModule, + CartBaseFeatureModule, + CartSavedCartFeatureModule, + WishListFeatureModule, + CartQuickOrderFeatureModule, + CartImportExportFeatureModule, + OrderFeatureModule, + CheckoutFeatureModule, + PersonalizationFeatureModule, + StoreFinderFeatureModule, + AsmFeatureModule, + AsmCustomer360FeatureModule, + SmartEditFeatureModule, + ProductVariantsFeatureModule, + ProductImageZoomFeatureModule + ] +}) +export class SpartacusFeaturesModule { } diff --git a/projects/showcase/src/app/spartacus/spartacus.module.ts b/projects/showcase/src/app/spartacus/spartacus.module.ts new file mode 100644 index 0000000..60c4938 --- /dev/null +++ b/projects/showcase/src/app/spartacus/spartacus.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { BaseStorefrontModule } from "@spartacus/storefront"; +import { SpartacusConfigurationModule } from './spartacus-configuration.module'; +import { SpartacusFeaturesModule } from './spartacus-features.module'; + +@NgModule({ + declarations: [], + imports: [ + BaseStorefrontModule, + SpartacusFeaturesModule, + SpartacusConfigurationModule + ], + exports: [BaseStorefrontModule] +}) +export class SpartacusModule { } diff --git a/projects/showcase/src/assets/.gitkeep b/projects/showcase/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/projects/showcase/src/favicon.ico b/projects/showcase/src/favicon.ico new file mode 100644 index 0000000..57614f9 Binary files /dev/null and b/projects/showcase/src/favicon.ico differ diff --git a/projects/showcase/src/index.html b/projects/showcase/src/index.html new file mode 100644 index 0000000..30b6676 --- /dev/null +++ b/projects/showcase/src/index.html @@ -0,0 +1,13 @@ + + + + + Adyendemostore + + + + + + + + diff --git a/projects/showcase/src/main.ts b/projects/showcase/src/main.ts new file mode 100644 index 0000000..c58dc05 --- /dev/null +++ b/projects/showcase/src/main.ts @@ -0,0 +1,7 @@ +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; + + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/projects/showcase/src/styles-config.scss b/projects/showcase/src/styles-config.scss new file mode 100644 index 0000000..49232e8 --- /dev/null +++ b/projects/showcase/src/styles-config.scss @@ -0,0 +1 @@ +$styleVersion: 2211.23 \ No newline at end of file diff --git a/projects/showcase/src/styles.scss b/projects/showcase/src/styles.scss new file mode 100644 index 0000000..0ebff86 --- /dev/null +++ b/projects/showcase/src/styles.scss @@ -0,0 +1,6 @@ +/* You can add global styles to this file, and also import other style files */ + +@import 'styles-config'; +@import '@spartacus/styles/index'; + +@import '@adyen/adyen-web/styles/adyen.css'; diff --git a/projects/showcase/src/styles/spartacus/asm.scss b/projects/showcase/src/styles/spartacus/asm.scss new file mode 100644 index 0000000..978c27d --- /dev/null +++ b/projects/showcase/src/styles/spartacus/asm.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/asm"; diff --git a/projects/showcase/src/styles/spartacus/cart.scss b/projects/showcase/src/styles/spartacus/cart.scss new file mode 100644 index 0000000..70f8b94 --- /dev/null +++ b/projects/showcase/src/styles/spartacus/cart.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/cart"; diff --git a/projects/showcase/src/styles/spartacus/checkout.scss b/projects/showcase/src/styles/spartacus/checkout.scss new file mode 100644 index 0000000..f25b93d --- /dev/null +++ b/projects/showcase/src/styles/spartacus/checkout.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/checkout"; diff --git a/projects/showcase/src/styles/spartacus/order.scss b/projects/showcase/src/styles/spartacus/order.scss new file mode 100644 index 0000000..facc5d9 --- /dev/null +++ b/projects/showcase/src/styles/spartacus/order.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/order"; diff --git a/projects/showcase/src/styles/spartacus/product.scss b/projects/showcase/src/styles/spartacus/product.scss new file mode 100644 index 0000000..36db288 --- /dev/null +++ b/projects/showcase/src/styles/spartacus/product.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/product"; diff --git a/projects/showcase/src/styles/spartacus/storefinder.scss b/projects/showcase/src/styles/spartacus/storefinder.scss new file mode 100644 index 0000000..2607313 --- /dev/null +++ b/projects/showcase/src/styles/spartacus/storefinder.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/storefinder"; diff --git a/projects/showcase/src/styles/spartacus/user.scss b/projects/showcase/src/styles/spartacus/user.scss new file mode 100644 index 0000000..a4041c8 --- /dev/null +++ b/projects/showcase/src/styles/spartacus/user.scss @@ -0,0 +1,2 @@ +@import "../../styles-config"; +@import "@spartacus/user"; diff --git a/projects/showcase/tsconfig.app.json b/projects/showcase/tsconfig.app.json new file mode 100644 index 0000000..5ce5cda --- /dev/null +++ b/projects/showcase/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "paths": { + "@adyen/adyen-spartacus/*": ["./../../dist/adyen/adyen-spartacus/*"], + "@adyen/adyen-spartacus": ["./../../dist/adyen/adyen-spartacus"] + }, + "outDir": "../../out-tsc/app", + "types": [] + }, + "files": ["src/main.ts"], + "include": ["src/**/*.d.ts"] +} diff --git a/projects/showcase/tsconfig.spec.json b/projects/showcase/tsconfig.spec.json new file mode 100644 index 0000000..0a43b83 --- /dev/null +++ b/projects/showcase/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +}