GitRoot

Craft your forge, Build your project, Grow your community freely
 1// SPDX-FileCopyrightText: 2025 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: EUPL-1.2
 4
 5package plugin
 6
 7import (
 8	"encoding/json"
 9	"testing"
10
11	"github.com/package-url/packageurl-go"
12	"gitroot.dev/libs/golang/plugin/model"
13)
14
15type dataCheckEqualTest struct {
16	name          string
17	aPlugin       Plugin
18	bPlugin       Plugin
19	shouldBeEqual bool
20}
21
22var fullLadybug1 = `{"PURL":"","Active":true,"Run":[{"Path":"issues/**/*.md","Branch":["*"],"When":["add","mod"],"Write":{"Git":[{"Path":"issues/**/*.md","Can":["mod"]}],"Web":[],"Exec":[]},"Configuration":{"metadata":[{"default":"autogenerated","mandatory":true,"name":"id","type":"crc16"},{"default":50,"mandatory":true,"name":"priority","type":"int"},{"default":null,"mandatory":false,"name":"assignee","type":"user"},{"default":"triage","mandatory":false,"name":"status","type":"string"},{"default":"issue","mandatory":false,"name":"kind","type":"string"}]}}]}`
23var fullLadybug2 = `{"PURL":"pkg:gitroot/gitroot/ladybug@0.4.0?registry=gitroot.dev%2Freleases%2F0.3.0&checksum=sha256","Active":true,"Run":[{"Path":"issues/**/*.md","Branch":["*"],"When":["add","mod"],"Write":{"Git":[{"Path":"issues/**/*.md","Can":["mod"]}],"Web":[],"Exec":[]},"Configuration":{"metadata":[{"default":"autogenerated","mandatory":true,"name":"id","type":"crc16"},{"default":50,"mandatory":true,"name":"priority","type":"int"},{"default":null,"mandatory":false,"name":"assignee","type":"user"},{"default":"triage","mandatory":false,"name":"status","type":"string"},{"default":"issue","mandatory":false,"name":"kind","type":"string"}]}}]}`
24
25func TestEqualPlugin(t *testing.T) {
26	purl, _ := packageurl.FromString("pkg:gitroot/gitroot/ladybug@0.4.0?registry=gitroot.dev%2Freleases%2F0.3.0&checksum=sha256")
27	laydybug1 := Plugin{
28		PURL: &purl,
29	}
30	json.Unmarshal([]byte(fullLadybug1), &laydybug1)
31	laydybug2 := Plugin{
32		PURL: &purl,
33	}
34	json.Unmarshal([]byte(fullLadybug2), &laydybug2)
35
36	data := []dataCheckEqualTest{
37		{name: "empty", aPlugin: buildPlugin("a"), bPlugin: buildPlugin("a"), shouldBeEqual: true},
38		{name: "different", aPlugin: buildPlugin("a"), bPlugin: buildPlugin("b"), shouldBeEqual: false},
39		{name: "fullLadybug", aPlugin: laydybug1, bPlugin: laydybug2, shouldBeEqual: true},
40	}
41
42	for _, d := range data {
43		ok := Equal(d.aPlugin, d.bPlugin)
44		if ok != d.shouldBeEqual {
45			t.Fatalf("%s fail with %t should be %t", d.name, ok, d.shouldBeEqual)
46		}
47	}
48}
49
50func buildPlugin(name string) Plugin {
51	return Plugin{
52		PURL:   packageurl.NewPackageURL("gitroot", "gitroot", name, "0.5.0", []packageurl.Qualifier{{Key: "checksum", Value: "123456"}}, ""),
53		Active: true,
54		Run:    []PluginRun{buildPluginRun([]string{"*"}, buildPluginWriteRight("*", model.PluginWriteRightCanAdd))},
55	}
56}