All files / src/app/core/models/sparque-product sparque-product.mapper.ts

50% Statements 7/14
71.42% Branches 5/7
66.66% Functions 4/6
46.15% Lines 6/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 4522x     22x         22x 2x                                 2x       1x                            
import { Injectable } from '@angular/core';
 
import { Product } from 'ish-core/models/product/product.model';
import { SparqueImageMapper } from 'ish-core/models/sparque-image/sparque-image.mapper';
 
import { SparqueProduct } from './sparque-product.interface';
 
@Injectable({ providedIn: 'root' })
export class SparqueProductMapper {
  constructor(private sparqueImageMapper: SparqueImageMapper) {}
 
  fromSuggestionsData(productsData: SparqueProduct[]): { productSkus: string[]; products: Partial<Product>[] } {
    const productSkus: string[] = [];
    const products: Partial<Product>[] = [];
 
    Iif (productsData?.length) {
      productsData.forEach(product => {
        products.push(this.fromData(product));
        productSkus.push(product.sku);
      });
    }
 
    return { productSkus, products };
  }
 
  fromListData(data: SparqueProduct[]): Partial<Product>[] {
    return data?.length ? data.map(product => this.fromData(product)) : [];
  }
 
  private fromData(data: SparqueProduct): Partial<Product> {
    return {
      sku: data.sku,
      name: data.name,
      shortDescription: data.shortDescription,
      manufacturer: data.defaultBrandName,
      available: true,
      type: 'Product',
      images: this.sparqueImageMapper.fromImages(data.images),
      // TODO: completenessLevel for product lists should be 2 (otherwise a product details call will be triggered)
      // the Sparque response is currently missing needed product data to omit the additional REST calls (rating, promotion, etc.)
      completenessLevel: 1,
    };
  }
}