## Offers Models Factories Package

This library contains the factories for test support on Marketplace related projects

### How to use:

Add the ```@comparaonline/offers-models-factories``` to project.
#### Use as the example:
```typescript
import { countryFactory } from '@comparaonline/offers-models-factories'

const country = countryFactory.build();

```

#### Passing custom data to Factory:

As FactoryGirls or similar libraries you can pass custom objects variables.
```typescript
import { countryFactory } from '@comparaonline/offers-models-factories'

countryParams = { code: 'cl', name: 'Chile' };
const country = countryFactory.build(countryParams);

```


### Contains Types definition for:
#### BusinessUnit
```typescript
import { businessUnitFactory } from '@comparaonline/offers-models-factories'

const bu = businessUnitFactory.build();

```
#### Company
```typescript
import { companyFactory } from '@comparaonline/offers-models-factories'

const company = companyFactory.build();

```
#### Country
```typescript
import { countryFactory } from '@comparaonline/offers-models-factories'

const company = companyFactory.build();

```
#### Division
```typescript
import { divisionFactory } from '@comparaonline/offers-models-factories'

const division = divisionFactory.build();

```

#### Entity
```typescript
import { entityFactory } from '@comparaonline/offers-models-factories'

const entity = entityFactory.build();

```

##### EntityMoneyInstallment
```typescript
import { entityMoneyInstallmentFactory } from '@comparaonline/offers-models-factories'

const entityMoneyInstallment = entityMoneyInstallmentFactory.build();

```

##### EntityList
```typescript
import { entityListFactory } from '@comparaonline/offers-models-factories'

const entityList = entityListFactory.build();

```

##### EntityMoney
```typescript
import { entityMoneyFactory } from '@comparaonline/offers-models-factories'

const entityMoney = entityMoneyFactory.build();

```

##### EntityNumber
```typescript
import { entityNumberFactory } from '@comparaonline/offers-models-factories'

const entityNumber = entityNumberFactory.build();

```

##### EntityPercentage
```typescript
import { entityPercentageFactory } from '@comparaonline/offers-models-factories'

const entityPercentage = entityPercentageFactory.build();

```

##### EntityTerm
```typescript
import { entityTermFactory } from '@comparaonline/offers-models-factories'

const entityTerm = entityTermFactory.build();

```

#### EntityFilter
```typescript
import { entityFilterFactory } from '@comparaonline/offers-models-factories'

const entityFilter = entityFilterFactory.build();

```

#### Filter
```typescript
import { filterFactory } from '@comparaonline/offers-models-factories'

const filter = filterFactory.build();

```

#### FormatMoney
```typescript
import { formatMoneyFactory } from '@comparaonline/offers-models-factories'

const formatMoney = formatMoneyFactory.build();

```

#### FormatNumber
```typescript
import { formatNumberFactory } from '@comparaonline/offers-models-factories'

const formatNumber = formatNumberFactory.build();

```

#### FormatPercentage
```typescript
import { formatPercentageFactory } from '@comparaonline/offers-models-factories'

const formatPercentage = formatPercentageFactory.build();

```

#### FormatUnit
```typescript
import { formatUnitFactory } from '@comparaonline/offers-models-factories'

const formatUnitFactory = formatUnitFactory.build();

```

#### Offer
```typescript
import { offerFactory } from '@comparaonline/offers-models-factories'

const offer = offerFactory.build();

```

#### Product
```typescript
import { productFactory } from '@comparaonline/offers-models-factories'

const product = productFactory.build();

```

#### ProductAttribute:
- \#build default Mode:
With default mode the value will be defined ramdonly in base of a ramdon selection of the entity type.
```typescript
import { productAttributeFactory } from '@comparaonline/offers-models-factories'

const productAttribute = productAttributeFactory.build();

```
- \#buildType (Force entityType):
```typescript
import { productAttributeFactory } from '@comparaonline/offers-models-factories'

const productAttribute = productAttributeFactory.buildType('money');

```
Types supported: ```[integer, money-installment, list, money, percentage, string, term] ```

#### Fixed Attributes Factories

These factories are the same as ```productAttributeFactory.buildType()``` with supported the ```value``` type when you pass the custom variables.

##### MoneyInstallmentAttribute
```typescript
import { moneyInstallmentAttributeFactory } from '@comparaonline/offers-models-factories'

const value: {
  total: { value: 100000 },
  installments: [
    {
      number: 1,
      price: 100000,
      total: ( 100000 * 1 )
    },
    {
      number: 2,
      price: 50000,
      total: (2 * 50000)
    },
    {
      number: 3,
      price: 33333,
      total: 3 * 33333
    }
  ]
}
const moneyInstallmentAttribute = moneyInstallmentAttributeFactory.build({ value });

```

##### IntegerAttribute
```typescript
import { integerAttributeFactory } from '@comparaonline/offers-models-factories'

const value:Number = 1000000;
const integerAttribute = integerAttributeFactory.build({ value: value });

```
##### StringAttribute
```typescript
import { stringAttributeFactory } from '@comparaonline/offers-models-factories'

const value:string = 'Hello';
const stringAttribute = stringAttributeFactory.build({ value: value });

```

##### ListAttribute
```typescript
import { listAttributeFactory } from '@comparaonline/offers-models-factories'

const value:string[] = ['Hello', 'how', 'are', 'you', '?'];
const listAttribute = listAttributeFactory.build({ value: value });

```

##### MoneyAttribute
```typescript
import { moneyAttributeFactory } from '@comparaonline/offers-models-factories'

const value: = {
  type: 'clp',
  value: 10000
};
const moneyAttribute = moneyAttributeFactory.build({ value: value });

```

##### TermAttribute
```typescript
import { termAttributeFactory } from '@comparaonline/offers-models-factories'

const value: = {
  datePart: 'years',
  value: 20
};
const termAttribute = termAttributeFactory.build({ value: value });

```
