import { expect } from 'chai' import { Element, Extension } from 'fhir' import { ElementBuilder, ExtensionBuilder } from '../src' describe('Element-builder', () => { it('should be able to build minimal Element', () => { expect(new ElementBuilder().build()).to.eql({}) }) it('should be able to accept existing Element', () => { expect( new ElementBuilder() .use({ id: 'id', }) .build() ).to.eql({ id: 'id', }) }) it('should be able to reset', () => { const elementBuilder: ElementBuilder = new ElementBuilder().use({ id: 'id', }) expect(elementBuilder.use().build()).to.eql({}) }) it('should be able to set id-field', () => { expect(new ElementBuilder().setId('id').build()).to.eql({ id: 'id', }) }) it('should be able to unset id-field', () => { const elementBuilder: ElementBuilder = new ElementBuilder().use({ id: 'id', }) expect(elementBuilder.setId().build()).to.eql({}) }) it('should be able to return id-field', () => { expect(new ElementBuilder().use({ id: 'id' }).getId()).to.eql('id') }) it('should be able to set extension-array', () => { expect( new ElementBuilder() .setExtension([ new ExtensionBuilder().setUrl('http://example.com/extension').build(), ]) .build() ).to.eql({ extension: [{ url: 'http://example.com/extension' }], }) }) it('should be able to unset extension-array', () => { const elementBuilder: ElementBuilder = new ElementBuilder().use({ extension: [{ url: 'http://example.com/extension' }], }) expect(elementBuilder.setExtension().build()).to.eql({}) }) it('should be able to return extension-array', () => { expect( new ElementBuilder() .use({ extension: [{ url: 'http://example.com/extension' }], }) .getExtension() ).to.eql([{ url: 'http://example.com/extension' }]) }) it('should return empty array when extension-array is empty', () => { expect(new ElementBuilder().getExtension()).to.eql([]) }) it('should be able to return extensions with specific url from extension-array', () => { expect( new ElementBuilder() .use({ extension: [ { url: 'http://example.com/extension' }, { url: 'http://example.com/another-extension' }, ], }) .getExtension('http://example.com/extension') ).to.eql([{ url: 'http://example.com/extension' }]) }) it('should be able to add extension to empty extension-array', () => { expect( new ElementBuilder() .addExtension({ url: 'http://example.com/extension' }) .getExtension() ).to.eql([{ url: 'http://example.com/extension' }]) }) })