Commit 087a7448 authored by Dan Allen's avatar Dan Allen
Browse files

resolves #995 assign unique origins as set to origins property on component version

parent 6a1b8fb6
Loading
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ This project utilizes semantic versioning.
=== Added

* *content-classifier*: Allow file to be explicitly marked as private; not private bypasses underscore check (#1153)
* *content-classifier*: Assign unique origins as set to `origins` property on component version; use empty set if no origins specified (#995)
* *navigation-builder*: Propagate roles and additional link properties on xref to entry in navigation model (#1175)
* *page-composer*: Add `file` property to UI model of page that resolves to raw virtual file of page (#1165)
* *page-composer*: Add built-in `resolveResource` UI helper to resolve raw virtual file of resource by reference (#1167)
+9 −4
Original line number Diff line number Diff line
@@ -60,8 +60,13 @@ class ContentCatalog {
   * @returns {Object} The constructed component version object.
   */
  registerComponentVersion (name, version, descriptor = {}) {
    const { asciidoc, displayVersion, prerelease, startPage: startPageSpec, title, versionSegment } = descriptor
    const componentVersion = { displayVersion: displayVersion || version || 'default', title: title || name, version }
    const { asciidoc, displayVersion, prerelease, startPage: startPageRef, title, versionSegment, origins } = descriptor
    const componentVersion = {
      displayVersion: displayVersion || version || 'default',
      title: title || name,
      version,
      origins: new Set(origins && typeof origins[Symbol.iterator] === 'function' ? origins : []),
    }
    if (versionSegment != null) componentVersion.versionSegment = versionSegment
    Object.defineProperty(componentVersion, 'name', { value: name, enumerable: true })
    if (prerelease) {
@@ -130,9 +135,9 @@ class ContentCatalog {
        )
      )
    }
    if (startPageSpec) {
    if (startPageRef) {
      // @deprecated use separate call to register start page for component version
      this.registerComponentVersionStartPage(name, componentVersion, startPageSpec === true ? undefined : startPageSpec)
      this.registerComponentVersionStartPage(name, componentVersion, startPageRef === true ? undefined : startPageRef)
    }
    return componentVersion
  }
+22 −1
Original line number Diff line number Diff line
@@ -421,6 +421,27 @@ describe('classifyContent()', () => {
      expect(versions).to.eql(['', 'v2.0', 'v1.2.3'])
    })

    it('should store unique origins as set on component version', () => {
      const origins = [
        { type: 'git', repo: 'https://githost/repo.git', branch: 'main' },
        { type: 'git', repo: 'https://githost/another-repo.git', branch: 'main' },
      ]
      aggregate[0].origins = origins
      const component = classifyContent(playbook, aggregate).getComponent('the-component')
      expect(component).to.exist()
      expect(component.versions).to.have.lengthOf(1)
      expect(component.versions[0].origins).to.have.lengthOf(2)
      for (const origin of origins) expect(component.versions[0].origins).to.include(origin)
    })

    it('should allow origins to be added to component version', () => {
      const component = classifyContent(playbook, aggregate).getComponent('the-component')
      expect(component).to.exist()
      expect(component.versions).to.have.lengthOf(1)
      component.versions[0].origins.add({ type: 'git', url: 'https://githost/repo.git' })
      expect(component.versions[0].origins).to.have.lengthOf(1)
    })

    it('should use name as title if title is falsy', () => {
      aggregate[0].title = undefined
      const component = classifyContent(playbook, aggregate).getComponent('the-component')
@@ -885,7 +906,7 @@ describe('classifyContent()', () => {
      const otherComponentVersions = otherComponent.versions
      expect(otherComponentVersions).to.have.lengthOf(1)
      const componentVersion = contentCatalog.getComponentVersion('the-component', 'v1.2.3')
      const expectedMembers = ['displayVersion', 'title', 'version', 'name', 'asciidoc', 'nav', 'url']
      const expectedMembers = ['displayVersion', 'title', 'version', 'name', 'asciidoc', 'nav', 'url', 'origins']
      expect(Object.keys(componentVersion)).to.have.members(expectedMembers)
      expect(componentVersion.files).to.eql(contentCatalog.findBy({ component: 'the-component', version: 'v1.2.3' }))
    })
+27 −11
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@ describe('ContentCatalog', () => {
      const title = 'The Component'
      const url = '/the-component/1.0.0/index.html'
      const contentCatalog = new ContentCatalog()
      const descriptor = { title, startPage: true }
      const descriptor = { title, startPage: true, origins: [{ type: 'git', url: 'https://githost/repo.git' }] }
      expect(contentCatalog.getComponents()).to.be.empty()
      contentCatalog.addFile({
        src: {
@@ -58,6 +58,7 @@ describe('ContentCatalog', () => {
          relative: 'index.adoc',
        },
      })
      const expectedOrigins = new Set(descriptor.origins)
      const componentVersion = contentCatalog.registerComponentVersion(name, version, descriptor)
      expect(componentVersion).to.exist()
      const components = contentCatalog.getComponents()
@@ -66,9 +67,16 @@ describe('ContentCatalog', () => {
        name,
        title,
        url,
        versions: [{ name, version, displayVersion: version, title, url }],
        versions: [{ name, version, displayVersion: version, title, url, origins: expectedOrigins }],
      })
      expect(components[0].latest).to.eql({
        name,
        version,
        displayVersion: version,
        title,
        url,
        origins: expectedOrigins,
      })
      expect(components[0].latest).to.eql({ name, version, displayVersion: version, title, url })
      expect(components[0]).to.not.have.property('latestVersion')
      expect(components[0].latestPrerelease).to.be.undefined()
    })
@@ -102,8 +110,8 @@ describe('ContentCatalog', () => {
        title: title2,
        url: url2,
        versions: [
          { name, version: version2, displayVersion: version2, title: title2, url: url2 },
          { name, version: version1, displayVersion: version1, title: title1, url: url1 },
          { name, version: version2, displayVersion: version2, title: title2, url: url2, origins: new Set() },
          { name, version: version1, displayVersion: version1, title: title1, url: url1, origins: new Set() },
        ],
      })
      expect(component.latest).to.eql({
@@ -112,6 +120,7 @@ describe('ContentCatalog', () => {
        displayVersion: version2,
        title: title2,
        url: url2,
        origins: new Set(),
      })
      expect(component.latest).to.equal(componentVersion2)
    })
@@ -181,6 +190,7 @@ describe('ContentCatalog', () => {
          title: title2,
          url: url2,
          prerelease: prerelease2,
          origins: new Set(),
        },
        {
          name: componentName,
@@ -188,6 +198,7 @@ describe('ContentCatalog', () => {
          displayVersion: version1,
          title: title1,
          url: url1,
          origins: new Set(),
        },
      ])
      expect(component.latest).to.eql({
@@ -196,6 +207,7 @@ describe('ContentCatalog', () => {
        displayVersion: version1,
        title: title1,
        url: url1,
        origins: new Set(),
      })
      expect(component.latestPrerelease).to.eql({
        name: componentName,
@@ -204,6 +216,7 @@ describe('ContentCatalog', () => {
        displayVersion: version2,
        title: title2,
        url: url2,
        origins: new Set(),
      })
      expect(component.name).to.equal(componentName)
      expect(component.title).to.equal(title1)
@@ -245,6 +258,7 @@ describe('ContentCatalog', () => {
          title: title2,
          url: url2,
          prerelease: prerelease2,
          origins: new Set(),
        },
        {
          name: componentName,
@@ -253,6 +267,7 @@ describe('ContentCatalog', () => {
          title: title1,
          url: url1,
          prerelease: prerelease1,
          origins: new Set(),
        },
      ])
      expect(component.latest).to.eql({
@@ -262,6 +277,7 @@ describe('ContentCatalog', () => {
        title: title2,
        url: url2,
        prerelease: prerelease2,
        origins: new Set(),
      })
      expect(component.latestPrerelease).to.be.undefined()
      expect(component.name).to.equal(componentName)
@@ -348,9 +364,9 @@ describe('ContentCatalog', () => {
        name,
        title,
        url,
        versions: [{ name, version, displayVersion: version, title, url }],
        versions: [{ name, version, displayVersion: version, title, url, origins: new Set() }],
      })
      expect(components[0].latest).to.eql({ name, version, displayVersion: version, title, url })
      expect(components[0].latest).to.eql({ name, version, displayVersion: version, title, url, origins: new Set() })
    })

    it('should not register start page if startPage property in descriptor is absent', () => {
@@ -367,7 +383,7 @@ describe('ContentCatalog', () => {
      expect(components[0]).to.deep.include({
        name,
        title,
        versions: [{ name, version, displayVersion: version, title }],
        versions: [{ name, version, displayVersion: version, title, origins: new Set() }],
      })
    })

@@ -385,7 +401,7 @@ describe('ContentCatalog', () => {
      expect(components[0]).to.deep.include({
        name,
        title,
        versions: [{ name, version, displayVersion: version, title }],
        versions: [{ name, version, displayVersion: version, title, origins: new Set() }],
      })
    })

@@ -599,9 +615,9 @@ describe('ContentCatalog', () => {
        name,
        title,
        url,
        versions: [{ name, version, displayVersion: version, title, url }],
        versions: [{ name, version, displayVersion: version, title, url, origins: new Set() }],
      })
      expect(components[0].latest).to.eql({ name, version, displayVersion: version, title, url })
      expect(components[0].latest).to.eql({ name, version, displayVersion: version, title, url, origins: new Set() })
    })

    it('should not change url if implicit start page not found and url is already set', () => {