/* Copyright (c) 2022 Betim Beja and Shko Online LLC Licensed under the MIT license. */ import type { SinonStub } from 'sinon'; import type { ShkoOnline } from '../ShkoOnline'; import { stub } from 'sinon'; import { AttributeType } from '../ComponentFramework-Mock'; export class AttributeMetadataGenerator { Attributes: ShkoOnline.AttributeMetadata[]; AddString: SinonStub<[args: string[]], AttributeMetadataGenerator>; AddBoolean: SinonStub<[args: string[]], AttributeMetadataGenerator>; AddInteger: SinonStub<[args: string[]], AttributeMetadataGenerator>; constructor(entityLogicalName: string) { this.Attributes = []; this.AddString = stub(); this.AddString.callsFake((args) => { this.Attributes = this.Attributes.concat( args.map( (logicalName) => ({ EntityLogicalName: entityLogicalName, LogicalName: logicalName, AttributeType: AttributeType.String, } as ShkoOnline.StringAttributeMetadata), ), ); return this; }); this.AddBoolean = stub(); this.AddBoolean.callsFake((args) => { this.Attributes = this.Attributes.concat( args.map( (logicalName) => ({ EntityLogicalName: entityLogicalName, LogicalName: logicalName, AttributeType: AttributeType.Boolean, } as ShkoOnline.BooleanAttributeMetadata), ), ); return this; }); this.AddInteger = stub(); this.AddInteger.callsFake((args) => { this.Attributes = this.Attributes.concat( args.map( (logicalName) => ({ EntityLogicalName: entityLogicalName, LogicalName: logicalName, AttributeType: AttributeType.Integer, } as ShkoOnline.IntegerNumberAttributeMetadata), ), ); return this; }); } }