aboutsummaryrefslogtreecommitdiffstats
path: root/tests/mason-core/receipt_spec.lua
blob: 05ce1439a004b4455a281793fecc574fad226994 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
local InstallReceipt = require("mason-core.receipt").InstallReceipt
local fs = require "mason-core.fs"

local function fixture(file)
    return vim.json.decode(fs.sync.read_file(("./tests/fixtures/receipts/%s"):format(file)))
end

describe("receipt ::", function()
    it("should parse 1.0 structures", function()
        local receipt = InstallReceipt.new(fixture "1.0.json")

        assert.equals("angular-language-server", receipt:get_name())
        assert.equals("1.0", receipt:get_schema_version())
        assert.same({ type = "npm", package = "@angular/language-server" }, receipt:get_source())
        assert.same({
            bin = {
                ngserver = "node_modules/.bin/ngserver",
            },
        }, receipt:get_links())
        assert.is_true(receipt:is_schema_min "1.0")
    end)

    it("should parse 1.1 structures", function()
        local receipt = InstallReceipt.new(fixture "1.1.json")

        assert.equals("angular-language-server", receipt:get_name())
        assert.equals("1.1", receipt:get_schema_version())
        assert.same({
            type = "registry+v1",
            id = "pkg:npm/%40angular/language-server@16.1.8",

            source = {
                extra_packages = { "typescript@5.1.3" },
                version = "16.1.8",
                package = "@angular/language-server",
            },
        }, receipt:get_source())
        assert.same({
            bin = {
                ngserver = "node_modules/.bin/ngserver",
            },
            opt = {},
            share = {},
        }, receipt:get_links())
        assert.is_true(receipt:is_schema_min "1.1")
    end)

    it("should parse 1.2 structures", function()
        local receipt = InstallReceipt.new(fixture "1.2.json")

        assert.equals("angular-language-server", receipt:get_name())
        assert.equals("1.2", receipt:get_schema_version())
        assert.same({
            type = "registry+v1",
            id = "pkg:npm/%40angular/language-server@16.1.8",
        }, receipt:get_source())
        assert.same({
            bin = {
                ngserver = "node_modules/.bin/ngserver",
            },
            opt = {},
            share = {},
        }, receipt:get_links())
        assert.is_true(receipt:is_schema_min "1.2")
    end)

    describe("schema versions ::", function()
        it("should check minimum compatibility", function()
            local receipt_1_0 = InstallReceipt.new { schema_version = "1.0" }
            local receipt_1_1 = InstallReceipt.new { schema_version = "1.1" }
            local receipt_1_2 = InstallReceipt.new { schema_version = "1.2" }

            assert.is_true(receipt_1_0:is_schema_min "1.0")
            assert.is_true(receipt_1_1:is_schema_min "1.0")
            assert.is_true(receipt_1_2:is_schema_min "1.0")

            assert.is_false(receipt_1_0:is_schema_min "1.1")
            assert.is_true(receipt_1_1:is_schema_min "1.1")
            assert.is_true(receipt_1_2:is_schema_min "1.1")

            assert.is_false(receipt_1_0:is_schema_min "1.2")
            assert.is_false(receipt_1_1:is_schema_min "1.2")
            assert.is_true(receipt_1_2:is_schema_min "1.2")
        end)
    end)
end)