aboutsummaryrefslogtreecommitdiffstats
path: root/tests/mason-core/receipt_spec.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-10-11 15:33:10 +0200
committerWilliam Boman <william@redwill.se>2025-02-16 09:49:17 +0100
commit40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa (patch)
tree1c092b13b2c40c693db87f040410411977990cef /tests/mason-core/receipt_spec.lua
parentfix(package): support older receipt structures (#1520) (diff)
downloadmason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.tar
mason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.tar.gz
mason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.tar.bz2
mason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.tar.lz
mason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.tar.xz
mason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.tar.zst
mason-40bb6ddfa84b91f58a53f9d92ce7a3ce0c57b9aa.zip
refactor(receipt): change receipt structure and remove old builder APIs (#1521)
Diffstat (limited to 'tests/mason-core/receipt_spec.lua')
-rw-r--r--tests/mason-core/receipt_spec.lua86
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/mason-core/receipt_spec.lua b/tests/mason-core/receipt_spec.lua
new file mode 100644
index 00000000..05ce1439
--- /dev/null
+++ b/tests/mason-core/receipt_spec.lua
@@ -0,0 +1,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)