Select Git revision
newsletter.service.spec.ts
To find the state of this project's repository at the time of any of these versions, check out the tags.
newsletter.service.spec.ts 8.19 KiB
import { HttpModule } from '@nestjs/axios';
import { HttpStatus } from '@nestjs/common';
import { getModelToken } from '@nestjs/mongoose';
import { Test, TestingModule } from '@nestjs/testing';
import { INewsletterSubscription } from './interface/newsletter-subscription.interface';
import { NewsletterSubscription } from './newsletter-subscription.schema';
import { NewsletterService } from './newsletter.service';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const mailchimp = require('@mailchimp/mailchimp_marketing');
jest.mock('@mailchimp/mailchimp_marketing');
describe('NewsletterService', () => {
const OLD_ENV = process.env;
let newsletterService: NewsletterService;
const mockNewsletterModel = {
create: jest.fn(),
deleteOne: jest.fn(),
countDocuments: jest.fn(),
findOne: jest.fn(),
exec: jest.fn(),
find: jest.fn(),
};
beforeEach(async () => {
jest.resetModules(); // Most important - it clears the cache
const module: TestingModule = await Test.createTestingModule({
imports: [HttpModule],
providers: [
NewsletterService,
{
provide: getModelToken(NewsletterSubscription.name),
useValue: mockNewsletterModel,
},
],
}).compile();
newsletterService = module.get<NewsletterService>(NewsletterService);
process.env = { ...OLD_ENV }; // Make a copy
process.env.MC_LIST_ID = 'abcde';
process.env.MC_API_KEY = 'k3y';
process.env.MC_SERVER = 's3rv3r';
});
afterAll(() => {
process.env = OLD_ENV; // Restore old environment
});
it('should be defined', () => {
expect(newsletterService).toBeDefined();
});
describe('newsletterSubscribe', () => {
it('it should add subscription for email test2@test.com even if it exists', async () => {
const _doc = { _id: 'a1aaaaa1a1', email: 'test2@test.com' } as INewsletterSubscription;
mailchimp.lists.setListMember.mockResolvedValueOnce({ email_address: 'test2@test.com' });
jest
.spyOn(newsletterService, 'findOne')
.mockImplementationOnce(async (): Promise<INewsletterSubscription | undefined> => _doc);
mockNewsletterModel.create.mockResolvedValueOnce(_doc);
const subscription = await newsletterService.newsletterSubscribe('test2@test.com');
expect(subscription).toEqual(_doc);
});
it('it should add a subscription for email test2@test.com', async () => {
const result = { email: 'test2@test.com' } as INewsletterSubscription;
const _doc = { _id: 'a1aaaaa1a1', email: 'test2@test.com' };
mailchimp.lists.setListMember.mockResolvedValueOnce({ email_address: 'test2@test.com' });
jest
.spyOn(newsletterService, 'findOne')