aboutsummaryrefslogtreecommitdiffstats
path: root/tests/mason-core/receipt_spec.lua
blob: 4436233be0892448e6f642d1f28b559f4084557a (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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 2.0 structures", function()
        local receipt = InstallReceipt:new(fixture "2.0.json")

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

    it("should retrieve purl information", function()
        local receipt_1_0 = InstallReceipt:new(fixture "1.0.json")
        local receipt_1_1 = InstallReceipt:new(fixture "1.1.json")
        local receipt_2_0 = InstallReceipt:new(fixture "2.0.json")

        assert.is_nil(receipt_1_0:get_installed_purl())
        assert.equals("pkg:npm/%40angular/language-server@16.1.8", receipt_1_1:get_installed_purl())
        assert.equals("pkg:npm/%40angular/language-server@19.1.0", receipt_2_0:get_installed_purl())
    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_2_0 = InstallReceipt:new { schema_version = "2.0" }

            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_2_0: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_2_0: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_2_0:is_schema_min "2.0")
        end)
    end)
end)