import { css, js, json, test } from '../utils'

test(
  'can rewrite urls in production builds',
  {
    fs: {
      'package.json': json`
        {
          "dependencies": {
            "postcss": "^8",
            "postcss-cli": "^10",
            "tailwindcss": "workspace:^",
            "@tailwindcss/postcss": "workspace:^"
          }
        }
      `,
      'postcss.config.js': js`
        module.exports = {
          plugins: {
            '@tailwindcss/postcss': {},
          },
        }
      `,
      'src/index.css': css`
        @reference 'tailwindcss';
        @import './dir-1/bar.css';
        @import './dir-1/dir-2/baz.css';
        @import './dir-1/dir-2/vector.css';
      `,
      'src/dir-1/bar.css': css`
        .test1 {
          background-image: url('../../resources/image.png');
        }
      `,
      'src/dir-1/dir-2/baz.css': css`
        .test2 {
          background-image: url('../../../resources/image.png');
        }
      `,
      'src/dir-1/dir-2/vector.css': css`
        @import './dir-3/vector.css';
        .test3 {
          background-image: url('../../../resources/vector.svg');
        }
      `,
      'src/dir-1/dir-2/dir-3/vector.css': css`
        .test4 {
          background-image: url('./vector-2.svg');
        }
      `,
    },
  },
  async ({ fs, exec, expect }) => {
    await exec('pnpm postcss src/index.css --output dist/out.css')

    expect(await fs.dumpFiles('dist/out.css')).toMatchInlineSnapshot(`
      "
      --- dist/out.css ---
      .test1 {
        background-image: url('../resources/image.png');
      }
      .test2 {
        background-image: url('../resources/image.png');
      }
      .test4 {
        background-image: url('./dir-1/dir-2/dir-3/vector-2.svg');
      }
      .test3 {
        background-image: url('../resources/vector.svg');
      }
      "
    `)
  },
)

test(
  'url rewriting can be disabled',
  {
    fs: {
      'package.json': json`
        {
          "dependencies": {
            "postcss": "^8",
            "postcss-cli": "^10",
            "tailwindcss": "workspace:^",
            "@tailwindcss/postcss": "workspace:^"
          }
        }
      `,
      'postcss.config.js': js`
        module.exports = {
          plugins: {
            '@tailwindcss/postcss': {
              transformAssetUrls: false,
            },
          },
        }
      `,
      'src/index.css': css`
        @reference 'tailwindcss';
        @import './dir-1/bar.css';
        @import './dir-1/dir-2/baz.css';
        @import './dir-1/dir-2/vector.css';
      `,
      'src/dir-1/bar.css': css`
        .test1 {
          background-image: url('../../resources/image.png');
        }
      `,
      'src/dir-1/dir-2/baz.css': css`
        .test2 {
          background-image: url('../../../resources/image.png');
        }
      `,
      'src/dir-1/dir-2/vector.css': css`
        @import './dir-3/vector.css';
        .test3 {
          background-image: url('../../../resources/vector.svg');
        }
      `,
      'src/dir-1/dir-2/dir-3/vector.css': css`
        .test4 {
          background-image: url('./vector-2.svg');
        }
      `,
    },
  },
  async ({ fs, exec, expect }) => {
    await exec('pnpm postcss src/index.css --output dist/out.css')

    expect(await fs.dumpFiles('dist/out.css')).toMatchInlineSnapshot(`
      "
      --- dist/out.css ---
      .test1 {
        background-image: url('../../resources/image.png');
      }
      .test2 {
        background-image: url('../../../resources/image.png');
      }
      .test4 {
        background-image: url('./vector-2.svg');
      }
      .test3 {
        background-image: url('../../../resources/vector.svg');
      }
      "
    `)
  },
)
