UNPKG

@lando/mailpit

Version:

A Mailpit integration plugin for Lando.

164 lines (140 loc) 5.72 kB
'use strict'; /** * @file Unit tests for the Mailpit service builder. * @module test/mailpit.spec * * This file contains unit tests for the Mailpit service builder. * It tests the functionality of the LandoMailpitService class created by the * builder, including default options, environment variables, and other * configurations. Run with `npm run test:unit` * * @requires chai * @requires builders/mailpit */ const DEFAULT_MAILPIT_VERSION = '1.27'; const chai = require('chai'); const expect = chai.expect; const mailpitBuilder = require('../builders/mailpit'); describe('Mailpit Builder', function() { let mockParent; let mockOptions; beforeEach(function() { mockParent = class MockParent { constructor(id, options = {}, ...sources) { this.id = id; // Create a deep copy of options this.options = JSON.parse(JSON.stringify(options)); this.sources = sources; } }; // Mock options that would be passed to the constructor mockOptions = { data: 'data_smtpserver', meUser: undefined, mailFrom: ['phpserver'], info: undefined, name: 'smtpserver', port: undefined, sources: undefined, confSrc: '/home/username/.lando/plugins/@lando/mailpit/config', confDest: '/home/username/.lando/config/mailpit', _app: { config: { services: { phpserver: {}, }, }, log: { debug: () => {}, // Mock debug function }, _lando: { utils: require('@lando/core/lib/utils'), }, }, }; }); it('should create a LandoMailpitService class with correct configuration', () => { const LandoMailpitService = mailpitBuilder.builder(mockParent, mailpitBuilder.config); const instance = new LandoMailpitService('smtpserver', mockOptions); expect(instance).to.be.instanceof(mockParent); expect(instance.id).to.equal('smtpserver'); expect(instance.options.name).to.equal('smtpserver'); expect(instance.options.data).to.equal('data_smtpserver'); expect(instance.options.mailFrom).to.deep.equal(['phpserver']); }); it('should use default values when not provided in options', () => { const LandoMailpitService = mailpitBuilder.builder( mockParent, mailpitBuilder.config, ); const instance = new LandoMailpitService('smtpserver', mockOptions); expect(instance.options.version).to.equal(DEFAULT_MAILPIT_VERSION); // Adjusted to match the correct default version expect(instance.options.maxMessages).to.equal(500); }); it('should set meUser to root', () => { const LandoMailpitService = mailpitBuilder.builder( mockParent, mailpitBuilder.config, ); const instance = new LandoMailpitService('smtpserver', mockOptions); expect(instance.options.meUser).to.equal('root'); }); it('should configure correct sources', () => { const LandoMailpitService = mailpitBuilder.builder( mockParent, mailpitBuilder.config, ); const instance = new LandoMailpitService('smtpserver', mockOptions); // The sources array should now have two items expect(instance.sources).to.have.lengthOf(2); expect(instance.sources[0]).to.have.nested.property('services.phpserver'); expect(instance.sources[1]).to.have.nested.property('services.smtpserver'); const mailpitService = instance.sources[1].services.smtpserver; expect(mailpitService.image).to.equal(`axllent/mailpit:v${DEFAULT_MAILPIT_VERSION}`); // Adjusted to match the correct default version expect(mailpitService.command).to.equal('/mailpit'); expect(mailpitService.environment).to.deep.include({ TERM: 'xterm', MP_UI_BIND_ADDR: '0.0.0.0:80', MP_SMTP_AUTH_ACCEPT_ANY: 1, MP_SMTP_AUTH_ALLOW_INSECURE: 1, MP_MAX_MESSAGES: 500, MP_DATABASE: '/data/mailpit.sqlite', }); expect(mailpitService.ports).to.deep.equal(['80']); // Adjusted to match the correct default port expect(mailpitService.volumes).to.deep.equal(['data_smtpserver:/data']); }); it('should configure other services when mailFrom is provided', () => { const LandoMailpitService = mailpitBuilder.builder(mockParent, mailpitBuilder.config); const instance = new LandoMailpitService('smtpserver', mockOptions); // Check that the mailFrom services are configured in options.sources const phpserverSource = instance.options.sources.find(source => source.services?.phpserver, ); expect(phpserverSource).to.exist; expect(phpserverSource.services.phpserver.environment).to.deep.include({ MAIL_HOST: 'smtpserver', MAIL_PORT: 1025, }); expect(phpserverSource.services.phpserver.volumes).to.deep.include( '/home/username/.lando/config/mailpit/php.ini:/usr/local/etc/php/conf.d/zzzz-lando-mailpit.ini', ); }); it('should use default port when not provided in options', () => { const LandoMailpitService = mailpitBuilder.builder(mockParent, mailpitBuilder.config); const instance = new LandoMailpitService('smtpserver', mockOptions); expect(instance.options.port).to.equal(1025); }); it('should override default values with provided options', () => { const customOptions = { ...mockOptions, version: '1.19', maxMessages: 2012, port: 2025, }; const LandoMailpitService = mailpitBuilder.builder(mockParent, mailpitBuilder.config); const instance = new LandoMailpitService('smtpserver', customOptions); expect(instance.options.version).to.equal('1.19'); expect(instance.options.maxMessages).to.equal(2012); expect(instance.options.port).to.equal(2025); }); });