mirror of
https://github.com/tiennm99/is-a-dev.git
synced 2026-10-16 00:15:06 +00:00
Merge branch 'main' of github.com:is-a-dev/register into feat/support-aaaa-records
This commit is contained in:
12 files changed
+210
-70
No files matched your search
+148
-59
@@ -1,9 +1,18 @@
|
||||
const R = require('ramda');
|
||||
const { toHostList, registerDomains } = require('../scripts/register-domains');
|
||||
const { TTL, DOMAIN_DOMAIN } = require('../utils/constants');
|
||||
const { getDomainService } = require('../utils/domain-service');
|
||||
const R = require('ramda')
|
||||
const { toHostList, registerDomains } = require('../scripts/register-domains')
|
||||
const { TTL, DOMAIN_DOMAIN } = require('../utils/constants')
|
||||
const { getDomainService } = require('../utils/domain-service')
|
||||
|
||||
const getCpanel = ({ zone, addZone, removeZone, redir, addRedir, removeRedir } = {}) => ({
|
||||
const getCpanel = ({
|
||||
zone,
|
||||
addZone,
|
||||
removeZone,
|
||||
redir,
|
||||
addRedir,
|
||||
removeRedir,
|
||||
addEmail,
|
||||
removeEmail,
|
||||
} = {}) => ({
|
||||
zone: {
|
||||
fetch: (_) => zone(),
|
||||
add: (rec) => addZone(rec),
|
||||
@@ -18,7 +27,7 @@ const getCpanel = ({ zone, addZone, removeZone, redir, addRedir, removeRedir } =
|
||||
add: (rec) => addEmail(rec),
|
||||
remove: (rec) => removeEmail(rec),
|
||||
},
|
||||
});
|
||||
})
|
||||
|
||||
describe('toHostList', () => {
|
||||
it('should flatten domain data to list of hosts (without https)', () => {
|
||||
@@ -27,7 +36,7 @@ describe('toHostList', () => {
|
||||
{ name: 'foobar', record: { CNAME: 'v.io' } },
|
||||
{ name: 'xx', record: { A: ['1.2.3.4', '5.6.3.2', '1.2.31.1'] } },
|
||||
{ name: 'xx', record: { CNAME: 'foobar.com', MX: ['as.com', 'f.com'] } },
|
||||
]);
|
||||
])
|
||||
|
||||
expect(res).toEqual([
|
||||
{ name: 'akshay', type: 'CNAME', address: 'phenax.github.io', ttl: TTL },
|
||||
@@ -38,83 +47,163 @@ describe('toHostList', () => {
|
||||
{ name: 'xx', type: 'CNAME', address: 'foobar.com', ttl: TTL },
|
||||
{ name: 'xx', type: 'MX', address: 'as.com', priority: 20, ttl: TTL },
|
||||
{ name: 'xx', type: 'MX', address: 'f.com', priority: 21, ttl: TTL },
|
||||
]);
|
||||
});
|
||||
});
|
||||
])
|
||||
})
|
||||
})
|
||||
|
||||
describe('registerDomains', () => {
|
||||
const addZone = jest.fn(async () => ({}));
|
||||
const removeZone = jest.fn(async () => ({}));
|
||||
const addRedir = jest.fn(async () => ({}));
|
||||
const removeRedir = jest.fn(async () => ({}));
|
||||
const addEmail = jest.fn(async () => ({}));
|
||||
const removeEmail = jest.fn(async () => ({}));
|
||||
const addZone = jest.fn(async () => ({}))
|
||||
const removeZone = jest.fn(async () => ({}))
|
||||
const addRedir = jest.fn(async () => ({}))
|
||||
const removeRedir = jest.fn(async () => ({}))
|
||||
const addEmail = jest.fn(async () => ({}))
|
||||
const removeEmail = jest.fn(async () => ({}))
|
||||
|
||||
const mockDS = ({ zones, redirections }) => getDomainService({
|
||||
cpanel: getCpanel({
|
||||
zone: async () => zones,
|
||||
redir: async () => redirections,
|
||||
addZone,
|
||||
addEmail,
|
||||
addRedir,
|
||||
removeZone,
|
||||
removeRedir,
|
||||
removeEmail,
|
||||
const mockDS = ({ zones, redirections }) =>
|
||||
getDomainService({
|
||||
cpanel: getCpanel({
|
||||
zone: async () => zones,
|
||||
redir: async () => redirections,
|
||||
addZone,
|
||||
addEmail,
|
||||
addRedir,
|
||||
removeZone,
|
||||
removeRedir,
|
||||
removeEmail,
|
||||
}),
|
||||
})
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
addZone.mockClear();
|
||||
removeZone.mockClear();
|
||||
addRedir.mockClear();
|
||||
removeRedir.mockClear();
|
||||
addEmail.mockClear();
|
||||
removeEmail.mockClear();
|
||||
});
|
||||
addZone.mockClear()
|
||||
removeZone.mockClear()
|
||||
addRedir.mockClear()
|
||||
removeRedir.mockClear()
|
||||
addEmail.mockClear()
|
||||
removeEmail.mockClear()
|
||||
})
|
||||
|
||||
it('should register the new set of hosts generated from domains list', async () => {
|
||||
const localHosts = [
|
||||
{ name: 'a', record: { CNAME: 'hello' } },
|
||||
{ name: 'b', record: { CNAME: 'xaa' } },
|
||||
];
|
||||
]
|
||||
const remoteHosts = [
|
||||
{ line: 1, name: 'a', type: 'CNAME', address: 'hello' },
|
||||
{ line: 2, name: 'b', type: 'CNAME', address: 'goo' },
|
||||
{ line: 3, name: 'b', type: 'CNAME', address: 'xaa' },
|
||||
];
|
||||
const remoteRedirections = [];
|
||||
]
|
||||
const remoteRedirections = []
|
||||
|
||||
const domainService = mockDS({ zones: remoteHosts, redirections: remoteRedirections });
|
||||
await registerDomains({ getDomains: async () => localHosts, domainService });
|
||||
const domainService = mockDS({
|
||||
zones: remoteHosts,
|
||||
redirections: remoteRedirections,
|
||||
})
|
||||
await registerDomains({ getDomains: async () => localHosts, domainService })
|
||||
|
||||
expect(addZone).toHaveBeenCalledTimes(0);
|
||||
expect(removeZone).toHaveBeenCalledTimes(1);
|
||||
expect(addRedir).toHaveBeenCalledTimes(0);
|
||||
expect(removeRedir).toHaveBeenCalledTimes(0);
|
||||
});
|
||||
expect(addZone).toHaveBeenCalledTimes(0)
|
||||
expect(removeZone).toHaveBeenCalledTimes(1)
|
||||
expect(addRedir).toHaveBeenCalledTimes(0)
|
||||
expect(removeRedir).toHaveBeenCalledTimes(0)
|
||||
})
|
||||
|
||||
it('should add the new set hosts', async () => {
|
||||
const localHosts = [
|
||||
{ name: 'a', record: { CNAME: 'boo', URL: 'z' } },
|
||||
{ name: 'b', record: { CNAME: 'xaa', URL: 'x' } },
|
||||
{ name: 'c', record: { CNAME: 'yello', URL: 'https://google.com' } },
|
||||
];
|
||||
{ name: 'a', record: { CNAME: 'boo' } },
|
||||
{
|
||||
name: 'b',
|
||||
record: { A: ['1.1.1.1', '1.1.1.2'], MX: 'somemx', TXT: 'some txt' },
|
||||
},
|
||||
{ name: 'c', record: { URL: 'https://google.com' } },
|
||||
{ name: 'd', record: { CNAME: 'foobar' } },
|
||||
{ name: 'e', record: { A: ['2.2.2.2'], TXT: ['some', 'extra', 'txt'] } },
|
||||
]
|
||||
const remoteHosts = [
|
||||
{ line: 1, name: 'a', type: 'CNAME', address: 'boo' },
|
||||
{ line: 2, name: 'b', type: 'CNAME', address: 'xaa' },
|
||||
];
|
||||
{ line: 2, name: 'b', type: 'MX', address: 'othermx' },
|
||||
{ line: 3, name: 'd', type: 'CNAME', address: 'foobaz' },
|
||||
]
|
||||
const remoteRedirections = [
|
||||
{ domain: `b.${DOMAIN_DOMAIN}`, destination: 'x' },
|
||||
{ domain: `a.${DOMAIN_DOMAIN}`, destination: 'y' },
|
||||
];
|
||||
]
|
||||
|
||||
const domainService = mockDS({ zones: remoteHosts, redirections: remoteRedirections });
|
||||
await registerDomains({ getDomains: async () => localHosts, domainService });
|
||||
const domainService = mockDS({
|
||||
zones: remoteHosts,
|
||||
redirections: remoteRedirections,
|
||||
})
|
||||
await registerDomains({ getDomains: async () => localHosts, domainService })
|
||||
|
||||
expect(addZone).toHaveBeenCalledTimes(1);
|
||||
expect(removeZone).toHaveBeenCalledTimes(0);
|
||||
expect(addRedir).toHaveBeenCalledTimes(2);
|
||||
expect(removeRedir).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
});
|
||||
expect(addZone).toHaveBeenCalledTimes(8)
|
||||
expect(addZone.mock.calls).toEqual([
|
||||
[{ name: 'b', type: 'A', address: '1.1.1.1', line: undefined }],
|
||||
[{ name: 'b', type: 'A', address: '1.1.1.2', line: undefined }],
|
||||
[
|
||||
{
|
||||
name: 'b',
|
||||
type: 'TXT',
|
||||
address: 'some txt',
|
||||
txtdata: 'some txt',
|
||||
line: undefined,
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'd',
|
||||
type: 'CNAME',
|
||||
cname: 'foobar',
|
||||
address: 'foobar',
|
||||
line: undefined,
|
||||
},
|
||||
],
|
||||
[{ name: 'e', type: 'A', address: '2.2.2.2', line: undefined }],
|
||||
[
|
||||
{
|
||||
name: 'e',
|
||||
type: 'TXT',
|
||||
address: 'some',
|
||||
txtdata: 'some',
|
||||
line: undefined,
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'e',
|
||||
type: 'TXT',
|
||||
address: 'extra',
|
||||
txtdata: 'extra',
|
||||
line: undefined,
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
name: 'e',
|
||||
type: 'TXT',
|
||||
address: 'txt',
|
||||
txtdata: 'txt',
|
||||
line: undefined,
|
||||
},
|
||||
],
|
||||
])
|
||||
|
||||
expect(removeZone).toHaveBeenCalledTimes(1)
|
||||
expect(removeZone.mock.calls).toEqual([[{ line: 3 }]])
|
||||
|
||||
expect(addRedir).toHaveBeenCalledTimes(1)
|
||||
expect(addRedir.mock.calls).toEqual([
|
||||
[
|
||||
{
|
||||
domain: 'c.booboo.xyz',
|
||||
redirect: 'https://google.com',
|
||||
redirect_wildcard: 1,
|
||||
redirect_www: 1,
|
||||
type: 'permanent',
|
||||
},
|
||||
],
|
||||
])
|
||||
|
||||
expect(addEmail).toHaveBeenCalledTimes(1)
|
||||
expect(addEmail.mock.calls).toEqual([
|
||||
[{ domain: 'b.is-a.dev', exchanger: 'somemx', priority: 20 }],
|
||||
])
|
||||
})
|
||||
})
|
||||
@@ -54,7 +54,6 @@ describe('validateDomainData', () => {
|
||||
{ ...defaultDomain, record: { CNAME: 'foobar.com', A: ['11.22.22.33'] } },
|
||||
{ ...defaultDomain, record: { CNAME: 'foobar.com', MX: ['ALT4.ASPMX.L.GOOGLE.COM'] } },
|
||||
...INVALID_NAMES.map(name => ({ ...defaultDomain, name })).slice(0, 1),
|
||||
{ ...defaultDomain, record: { TXT: ['foobar wow nice!!!'] } },
|
||||
{ ...defaultDomain, name: 'a.b' },
|
||||
{ ...defaultDomain, name: 'ww2.baa' },
|
||||
{ ...defaultDomain, name: 'help.baa' },
|
||||
@@ -90,6 +89,7 @@ describe('validateDomainData', () => {
|
||||
{ ...defaultDomain, name: '_github-challenge-phenax.akshay' },
|
||||
{ ...defaultDomain, name: '_github-challenge-hello01-ga' },
|
||||
{ ...defaultDomain, name: '_github-challenge-hello01_ga' },
|
||||
{ ...defaultDomain, record: { TXT: ['foobar wow nice!!!', 'more text'] } },
|
||||
{ ...defaultDomain, record: { AAAA: ['::1', '2001:db8:3333:4444:5555:6666:7777:8888'] } },
|
||||
{ ...defaultDomain, record: { A: ['122.222.222.222'] } },
|
||||
];
|
||||
|
||||
Reference in new issue
Block a user