Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions packages/fxa-auth-server/lib/account-delete.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import Container from 'typedi';
import { createMock, DeepMocked } from '@golevelup/ts-jest';
import { StatsD } from 'hot-shots';
import { v4 as uuidv4 } from 'uuid';
import { AppError, ERRNO } from '@fxa/accounts/errors';
import { AppleIAP } from './payments/iap/apple-app-store/apple-iap';
Expand Down Expand Up @@ -47,7 +49,7 @@ describe('AccountDeleteManager', () => {
let mockOAuthDb: any;
let mockPush: any;
let mockPushbox: any;
let mockStatsd: any;
let mockStatsd: DeepMocked<StatsD>;
let mockGlean: any;
let mockMailer: any;
let mockStripeHelper: any;
Expand Down Expand Up @@ -89,11 +91,11 @@ describe('AccountDeleteManager', () => {
mockOAuthDb = {};
mockPush = mocks.mockPush();
mockPushbox = mocks.mockPushbox();
mockStatsd = { increment: jest.fn() };
mockStatsd = createMock<StatsD>();
mockGlean = mocks.mockGlean();
mockMailer = mocks.mockMailer();
mockStripeHelper = {};
mockLog = mocks.mockLog();
mockLog = createMock<AuthLogger>();
mockAppleIap = {
purchaseManager: {
deletePurchases: jest.fn().mockResolvedValue(undefined),
Expand Down
8 changes: 5 additions & 3 deletions packages/fxa-auth-server/lib/cad-reminders.in.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */

import { createMock } from '@golevelup/ts-jest';
import { AuthLogger } from './types';

const REMINDERS = ['first', 'second', 'third'];
const EXPECTED_CREATE_DELETE_RESULT = REMINDERS.reduce(
(expected: any, reminder) => {
Expand All @@ -12,14 +15,13 @@ const EXPECTED_CREATE_DELETE_RESULT = REMINDERS.reduce(
);

const config = require('../config').default.getProperties();
const mocks = require('../test/mocks');

describe('#integration - lib/cad-reminders', () => {
let log: any, mockConfig: any, redis: any, cadReminders: any;

beforeEach(() => {
jest.resetModules();
log = mocks.mockLog();
log = createMock<AuthLogger>();
mockConfig = {
redis: config.redis,
cadReminders: {
Expand All @@ -40,7 +42,7 @@ describe('#integration - lib/cad-reminders', () => {
...mockConfig.cadReminders.redis,
enabled: true,
},
mocks.mockLog()
createMock<AuthLogger>()
);
cadReminders = require('./cad-reminders')(mockConfig, log);
});
Expand Down
16 changes: 9 additions & 7 deletions packages/fxa-auth-server/lib/db.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import { createMock } from '@golevelup/ts-jest';
import { AuthLogger } from './types';

// Mock fxa-shared/db to prevent real DB connections
jest.mock('fxa-shared/db', () => ({
setupAuthDatabase: jest.fn(),
Expand Down Expand Up @@ -59,7 +62,6 @@ jest.mock('fxa-shared/connected-services', () => {
});

// Import after mocks
const mocks = require('../test/mocks');
const config = require('../config').default.getProperties();
const models: any = require('fxa-shared/db/models/auth');
const { createDB } = require('./db');
Expand All @@ -73,7 +75,7 @@ describe('db, session tokens expire:', () => {

beforeEach(async () => {
redisMockFactory = () => undefined;
log = mocks.mockLog();
log = createMock<AuthLogger>();
tokens = require('../lib/tokens')(log, { tokenLifetimes });
const DB = createDB(
{
Expand Down Expand Up @@ -131,7 +133,7 @@ describe('db, session tokens do not expire:', () => {

beforeEach(async () => {
redisMockFactory = () => undefined;
log = mocks.mockLog();
log = createMock<AuthLogger>();
tokens = require('../lib/tokens')(log, { tokenLifetimes });
const DB = createDB(
{
Expand Down Expand Up @@ -189,7 +191,7 @@ describe('db with redis disabled:', () => {

beforeEach(async () => {
redisMockFactory = () => undefined;
log = mocks.mockLog();
log = createMock<AuthLogger>();
tokens = require('../lib/tokens')(log, { tokenLifetimes });
const DB = createDB(
{ redis: {}, tokenLifetimes, tokenPruning: {} },
Expand Down Expand Up @@ -249,7 +251,7 @@ describe('redis enabled, token-pruning enabled:', () => {
expect(args[0].blee).toBeUndefined();
return redis;
};
log = mocks.mockLog();
log = createMock<AuthLogger>();
tokens = require('../lib/tokens')(log, { tokenLifetimes });
const DB = createDB(
{
Expand Down Expand Up @@ -489,7 +491,7 @@ describe('redis enabled, token-pruning disabled:', () => {
expect(args[0].blee).toBeUndefined();
return redis;
};
log = mocks.mockLog();
log = createMock<AuthLogger>();
tokens = require('../lib/tokens')(log, { tokenLifetimes });
const DB = createDB(
{
Expand Down Expand Up @@ -539,7 +541,7 @@ describe('db.deviceFromRefreshTokenId:', () => {
mergeDevicesAndSessionTokens: jest.Mock;

beforeEach(async () => {
log = mocks.mockLog();
log = createMock<AuthLogger>();
tokens = require('../lib/tokens')(log, { tokenLifetimes });

models.Device.findByUidAndRefreshTokenId = jest.fn();
Expand Down
7 changes: 5 additions & 2 deletions packages/fxa-auth-server/lib/devices.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import { createMock } from '@golevelup/ts-jest';
import { AuthLogger } from './types';

const crypto = require('crypto');
const mocks = require('../test/mocks');
const { AppError: error } = require('@fxa/accounts/errors');
Expand Down Expand Up @@ -36,7 +39,7 @@ interface DevicesModule {

describe('lib/devices:', () => {
describe('instantiate:', () => {
let log: ReturnType<typeof mocks.mockLog>,
let log: AuthLogger,
deviceCreatedAt: number,
deviceId: string,
device: Record<string, unknown>,
Expand All @@ -46,7 +49,7 @@ describe('lib/devices:', () => {
pushbox: ReturnType<typeof mocks.mockPushbox>;

beforeEach(() => {
log = mocks.mockLog();
log = createMock<AuthLogger>();
deviceCreatedAt = Date.now();
deviceId = crypto.randomBytes(16).toString('hex');
device = {
Expand Down
8 changes: 5 additions & 3 deletions packages/fxa-auth-server/lib/email/bounces.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@

import { EventEmitter } from 'events';
import Container from 'typedi';
import { createMock } from '@golevelup/ts-jest';
import { StatsD } from 'hot-shots';
import { AuthLogger } from '../types';

const bounces = require('./bounces');
const { AppError: error } = require('@fxa/accounts/errors');
const { mockLog, mockStatsd } = require('../../test/mocks');
const { StripeHelper } = require('../payments/stripe');
const emailHelpers = require('./utils/helpers');

Expand All @@ -34,8 +36,8 @@ describe('bounce messages', () => {
}

beforeEach(() => {
log = mockLog();
statsd = mockStatsd();
log = createMock<AuthLogger>();
statsd = createMock<StatsD>();
mockConfig = {
smtp: {
bounces: {
Expand Down
36 changes: 19 additions & 17 deletions packages/fxa-auth-server/lib/email/delivery-delay.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import { EventEmitter } from 'events';
import { createMock } from '@golevelup/ts-jest';
import { StatsD } from 'hot-shots';
import { AuthLogger } from '../types';

const { mockLog, mockStatsd } = require('../../test/mocks');
const emailHelpers = require('./utils/helpers');
const deliveryDelay = require('./delivery-delay');

Expand Down Expand Up @@ -48,26 +50,26 @@ describe('delivery delay messages', () => {
});

it('should not log an error for headers', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
await mockedDeliveryDelay(log, statsd).handleDeliveryDelay(
mockMessage({ junk: 'message' })
);
expect(log.error).toHaveBeenCalledTimes(0);
});

it('should log an error for missing headers', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const message = mockMessage({ junk: 'message' });
message.headers = undefined;
await mockedDeliveryDelay(log, statsd).handleDeliveryDelay(message);
expect(log.error).toHaveBeenCalledTimes(1);
});

it('should log delivery delay with all fields', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const mockMsg = createDeliveryDelayMessage({
deliveryDelay: {
delayType: 'TransientCommunicationFailure',
Expand Down Expand Up @@ -118,8 +120,8 @@ describe('delivery delay messages', () => {
});

it('should handle delivery delay with notificationType', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const mockMsg = createDeliveryDelayMessage({
notificationType: 'DeliveryDelay',
eventType: undefined,
Expand Down Expand Up @@ -150,8 +152,8 @@ describe('delivery delay messages', () => {
jest
.spyOn(emailHelpers, 'logAccountEventFromMessage')
.mockReturnValue(Promise.resolve());
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const mockMsg = createDeliveryDelayMessage({
deliveryDelay: {
delayType: 'SpamDetected',
Expand All @@ -169,8 +171,8 @@ describe('delivery delay messages', () => {
});

it('should handle popular email domain', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const mockMsg = createDeliveryDelayMessage({
deliveryDelay: {
delayType: 'RecipientServerError',
Expand All @@ -187,8 +189,8 @@ describe('delivery delay messages', () => {
});

it('should handle missing delayedRecipients gracefully', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const mockMsg = createDeliveryDelayMessage({
deliveryDelay: {
delayType: 'Undetermined',
Expand All @@ -204,8 +206,8 @@ describe('delivery delay messages', () => {
});

it('should handle errors and still delete message', async () => {
const log = mockLog();
const statsd = mockStatsd();
const log = createMock<AuthLogger>();
const statsd = createMock<StatsD>();
const mockMsg = createDeliveryDelayMessage();

jest
Expand Down
20 changes: 11 additions & 9 deletions packages/fxa-auth-server/lib/email/delivery.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import { EventEmitter } from 'events';
import { createMock } from '@golevelup/ts-jest';
import { AuthLogger } from '../types';

const { mockLog, mockGlean } = require('../../test/mocks');
const { mockGlean } = require('../../test/mocks');
const emailHelpers = require('./utils/helpers');
const delivery = require('./delivery');
const { requestForGlean } = require('../inactive-accounts');
Expand Down Expand Up @@ -32,7 +34,7 @@ describe('delivery messages', () => {
});

it('should not log an error for headers', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
await mockedDelivery(log, glean).handleDelivery(
mockMessage({ junk: 'message' })
Expand All @@ -41,7 +43,7 @@ describe('delivery messages', () => {
});

it('should log an error for missing headers', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
const message = mockMessage({
junk: 'message',
Expand All @@ -52,7 +54,7 @@ describe('delivery messages', () => {
});

it('should ignore unknown message types', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
await mockedDelivery(log, glean).handleDelivery(
mockMessage({
Expand All @@ -67,7 +69,7 @@ describe('delivery messages', () => {
});

it('should log delivery', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
const mockMsg = mockMessage({
notificationType: 'Delivery',
Expand Down Expand Up @@ -112,7 +114,7 @@ describe('delivery messages', () => {
});

it('should emit flow metrics', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
const mockMsg = mockMessage({
notificationType: 'Delivery',
Expand Down Expand Up @@ -175,7 +177,7 @@ describe('delivery messages', () => {
});

it('should log popular email domain', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
const mockMsg = mockMessage({
notificationType: 'Delivery',
Expand Down Expand Up @@ -242,7 +244,7 @@ describe('delivery messages', () => {
jest
.spyOn(emailHelpers, 'logAccountEventFromMessage')
.mockReturnValue(Promise.resolve());
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
const mockMsg = mockMessage({
notificationType: 'Delivery',
Expand Down Expand Up @@ -285,7 +287,7 @@ describe('delivery messages', () => {
});

it('should log glean event for successful email delivery', async () => {
const log = mockLog();
const log = createMock<AuthLogger>();
const glean = mockGlean();
const mockMsg = mockMessage({
notificationType: 'Delivery',
Expand Down
5 changes: 3 additions & 2 deletions packages/fxa-auth-server/lib/email/notifications.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

import Container from 'typedi';
import { createMock } from '@golevelup/ts-jest';
import { StripeHelper } from '../payments/stripe';
import { AuthLogger } from '../types';

const { AppError: error } = require('@fxa/accounts/errors');
const { mockLog } = require('../../test/mocks');
const notifications = require('./notifications');

const SIX_HOURS = 1000 * 60 * 60 * 6;
Expand All @@ -28,7 +29,7 @@ describe('lib/email/notifications:', () => {
now = Date.now();
jest.spyOn(Date, 'now').mockImplementation(() => now);
del = jest.fn();
log = mockLog();
log = createMock<AuthLogger>();
queue = {
start: jest.fn(),
on: jest.fn(),
Expand Down
Loading
Loading