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	"gitroot.dev/libs/golang/plugin/model"
12)
13
14type dataCheckEqualTest struct {
15	name          string
16	aPlugin       Plugin
17	bPlugin       Plugin
18	shouldBeEqual bool
19}
20
21var fullLadybug1 = `{"Url":"","Checksum":"","Name":"ladybug","Version":"0.0.2","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"}]}}]}`
22var fullLadybug2 = `{"Url":"","Checksum":"","Name":"ladybug","Version":"0.0.2","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"}]}}]}`
23
24func TestEqualPlugin(t *testing.T) {
25	laydybug1 := Plugin{}
26	json.Unmarshal([]byte(fullLadybug1), &laydybug1)
27	laydybug2 := Plugin{}
28	json.Unmarshal([]byte(fullLadybug2), &laydybug2)
29
30	data := []dataCheckEqualTest{
31		{name: "empty", aPlugin: buildPlugin("a"), bPlugin: buildPlugin("a"), shouldBeEqual: true},
32		{name: "different", aPlugin: buildPlugin("a"), bPlugin: buildPlugin("b"), shouldBeEqual: false},
33		{name: "fullLadybug", aPlugin: laydybug1, bPlugin: laydybug2, shouldBeEqual: true},
34	}
35
36	for _, d := range data {
37		ok := Equal(d.aPlugin, d.bPlugin)
38		if ok != d.shouldBeEqual {
39			t.Fatalf("%s fail with %t should be %t", d.name, ok, d.shouldBeEqual)
40		}
41	}
42}
43
44func buildPlugin(name string) Plugin {
45	return Plugin{
46		Name:    name,
47		Version: "0.0.0",
48		Active:  true,
49		Run:     []PluginRun{buildPluginRun([]string{"*"}, buildPluginWriteRight("*", model.PluginWriteRightCanAdd))},
50	}
51}