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}