import { fromContents } from "../../lib-js/spec-directory"

describe("SpecDirectory options", () => {
  it("works in the basic case", async () => {
    const dir = await fromContents(
      `
<===> options.yml
:todo:
  - dart-sass
:ignore_for:
  - libsass
:precision: 3
`.trimStart()
    )
    const options = await dir.options()
    expect(options.getMode("dart-sass")).toEqual("todo")
    expect(options.getMode("libsass")).toEqual("ignore")
    expect(options.precision()).toEqual(3)
  })

  it("overrides parent options correctly", async () => {
    const dir = await fromContents(
      `
<===> options.yml
:todo:
  - dart-sass
:ignore_for:
  - libsass
:precision: 3
<===> child/options.yml
:todo:
  - sass-mock
:ignore_for:
  - dart-sass
:warning_todo:
  - libsass
:precision: 4
`.trimStart()
    )
    const childDir = await dir.atPath("child")
    const options = await childDir.options()
    expect(options.getMode("sass-mock")).toEqual("todo")
    expect(options.getMode("dart-sass")).toEqual("ignore")
    expect(options.isWarningTodo("libsass")).toEqual(true)
    expect(options.precision()).toEqual(4)
  })

  it("overrides more than one layer deep", async () => {
    const dir = await fromContents(
      `
<===> options.yml
:precision: 3
<===> deep/child/options.yml
:precision: 4
`.trimStart()
    )
    const noOptsChild = await dir.atPath("deep")
    expect((await noOptsChild.options()).precision()).toEqual(3)
    const deepChild = await dir.atPath("deep/child")
    expect((await deepChild.options()).precision()).toEqual(4)
  })
})