You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
229 lines
7.3 KiB
229 lines
7.3 KiB
import {hasBeenEmailed} from '../../../src/utils/post-utils';
|
|
import {Post} from '../../../src/api/posts';
|
|
|
|
describe('post-utils', () => {
|
|
describe('hasBeenEmailed', () => {
|
|
it('returns false for posts without email data', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published'
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(false);
|
|
});
|
|
|
|
it('returns true for published posts with valid email data', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 10,
|
|
email_count: 100,
|
|
status: 'submitted'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('returns true for sent posts with valid email data', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'sent',
|
|
email: {
|
|
opened_count: 10,
|
|
email_count: 100,
|
|
status: 'submitted'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('returns false for draft posts with email data', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'draft',
|
|
email: {
|
|
opened_count: 0,
|
|
email_count: 0,
|
|
status: 'pending'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(false);
|
|
});
|
|
|
|
it('returns false for published posts with failed email status', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 0,
|
|
email_count: 0,
|
|
status: 'failed'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(false);
|
|
});
|
|
|
|
it('returns true for published posts with failed status but positive email_count', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 50,
|
|
email_count: 100,
|
|
status: 'failed'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('returns true for posts with email data but no status field', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 10,
|
|
email_count: 100
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('returns true for posts with email data but zero email_count', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 0,
|
|
email_count: 0
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('handles posts with undefined status', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
email: {
|
|
opened_count: 10,
|
|
email_count: 100
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(false);
|
|
});
|
|
|
|
it('handles posts with null email object', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: null as any
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(false);
|
|
});
|
|
|
|
it('handles posts with email object but missing email_count', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 10
|
|
} as any
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('returns false for scheduled posts with email data', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'scheduled',
|
|
email: {
|
|
opened_count: 0,
|
|
email_count: 100,
|
|
status: 'pending'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(false);
|
|
});
|
|
|
|
it('handles edge case with negative email_count', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 0,
|
|
email_count: -1,
|
|
status: 'submitted'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
|
|
it('handles edge case with string email_count', () => {
|
|
const post: Post = {
|
|
id: '1',
|
|
url: 'http://example.com/post',
|
|
slug: 'test-post',
|
|
title: 'Test Post',
|
|
uuid: 'uuid-1',
|
|
status: 'published',
|
|
email: {
|
|
opened_count: 0,
|
|
email_count: '100' as any,
|
|
status: 'submitted'
|
|
}
|
|
};
|
|
expect(hasBeenEmailed(post)).toBe(true);
|
|
});
|
|
});
|
|
}); |