Skip to content

Commit d3e2a9c

Browse files
authored
Merge pull request #58 from mizdra/fix-seq-bug
Fix issue that `seq` does not increment when using traits
2 parents d22839c + 7b14060 commit d3e2a9c

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

e2e/index.e2e.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,25 @@ describe('defineTypeFactory', () => {
528528
height: number;
529529
}>();
530530
});
531+
it('increments seq even with traits', async () => {
532+
const ImageFactory = defineImageFactory({
533+
defaultFields: {
534+
id: dynamic(({ seq }) => `Image-${seq}`),
535+
url: '#',
536+
},
537+
traits: {
538+
avatar: {
539+
defaultFields: {
540+
url: 'https://example.com/avatar.png',
541+
},
542+
},
543+
},
544+
});
545+
const image1 = await ImageFactory.build();
546+
const image2 = await ImageFactory.use('avatar').build();
547+
expect(image1.id).toBe('Image-0');
548+
expect(image2.id).toBe('Image-1');
549+
});
531550
});
532551
describe('transientFields', () => {
533552
it('basic', async () => {

src/helper/factory.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ export function defineTypeFactoryInternal<
5555
defaultFields: defaultFieldsResolver,
5656
traits,
5757
}: TypeFactoryDefineOptions<Type, TransientFields, _DefaultFieldsResolver, _Traits>,
58+
seqKey: object = {},
5859
): TypeFactoryInterface<Type, TransientFields, _DefaultFieldsResolver, _Traits> {
59-
const seqKey = {};
6060
const getSeq = () => getSequenceCounter(seqKey);
6161
return {
6262
async build<T extends FieldsResolver<Type & TransientFields>>(
@@ -98,10 +98,14 @@ export function defineTypeFactoryInternal<
9898

9999
if (!trait) throw new Error(`Trait ("${String(traitName)}") is not defined.`);
100100
// @ts-expect-error -- Use @ts-expect-error as it is impossible to match types.
101-
return defineTypeFactoryInternal(typeFieldNames, {
102-
defaultFields: { ...defaultFieldsResolver, ...trait.defaultFields },
103-
traits,
104-
});
101+
return defineTypeFactoryInternal(
102+
typeFieldNames,
103+
{
104+
defaultFields: { ...defaultFieldsResolver, ...trait.defaultFields },
105+
traits,
106+
},
107+
seqKey,
108+
);
105109
},
106110
resetSequence() {
107111
resetSequence(seqKey);

0 commit comments

Comments
 (0)