import { createResponse } from 'node-mocks-http'; import { WwwAuthMetadataWriter } from '../../../../../src/ldp/http/metadata/WwwAuthMetadataWriter'; import { RepresentationMetadata } from '../../../../../src/ldp/representation/RepresentationMetadata'; import type { HttpResponse } from '../../../../../src/server/HttpResponse'; import { HTTP } from '../../../../../src/util/Vocabularies'; describe('A WwwAuthMetadataWriter', (): void => { const auth = 'Bearer scope="openid webid"'; const writer = new WwwAuthMetadataWriter(auth); let response: HttpResponse; beforeEach(async(): Promise => { response = createResponse(); }); it('adds no header if there is no relevant metadata.', async(): Promise => { const metadata = new RepresentationMetadata(); await expect(writer.handle({ response, metadata })).resolves.toBeUndefined(); expect(response.getHeaders()).toEqual({ }); }); it('adds no header if the status code is not 401.', async(): Promise => { const metadata = new RepresentationMetadata({ [HTTP.statusCodeNumber]: '403' }); await expect(writer.handle({ response, metadata })).resolves.toBeUndefined(); expect(response.getHeaders()).toEqual({ }); }); it('adds a WWW-Authenticate header if the status code is 401.', async(): Promise => { const metadata = new RepresentationMetadata({ [HTTP.statusCodeNumber]: '401' }); await expect(writer.handle({ response, metadata })).resolves.toBeUndefined(); expect(response.getHeaders()).toEqual({ 'www-authenticate': auth, }); }); });