11package changesets
22
33import (
4+ "encoding/json"
45 "fmt"
56 "testing"
67
@@ -11,6 +12,8 @@ import (
1112 cldf "github.com/smartcontractkit/chainlink-deployments-framework/deployment"
1213 cldfoperations "github.com/smartcontractkit/chainlink-deployments-framework/operations"
1314 cldflogger "github.com/smartcontractkit/chainlink-deployments-framework/pkg/logger"
15+
16+ "github.com/smartcontractkit/cld-changesets/datastore/internal/keys"
1417)
1518
1619func TestDeleteAddressRefChangeset_VerifyPreconditions (t * testing.T ) {
@@ -32,14 +35,14 @@ func TestDeleteAddressRefChangeset_VerifyPreconditions(t *testing.T) {
3235 DataStore : testDataStoreWithAddressRefs (t , addressRef1 ).Seal (),
3336 },
3437 input : DeleteAddressRefChangesetInput {
35- AddressRefKeys : []DeleteAddressRefKey { deleteAddressRefKey (addressRef1 ), deleteAddressRefKey (addressRef2 )},
38+ AddressRefKeys : []keys. AddressRefKey { addressRefKey (addressRef1 ), addressRefKey (addressRef2 )},
3639 },
3740 },
3841 {
3942 name : "failure: missing datastore" ,
4043 env : cldf.Environment {},
4144 input : DeleteAddressRefChangesetInput {
42- AddressRefKeys : []DeleteAddressRefKey { deleteAddressRefKey (addressRef1 ), deleteAddressRefKey (addressRef2 )},
45+ AddressRefKeys : []keys. AddressRefKey { addressRefKey (addressRef1 ), addressRefKey (addressRef2 )},
4346 },
4447 wantErr : "missing datastore in environment" ,
4548 },
@@ -48,15 +51,15 @@ func TestDeleteAddressRefChangeset_VerifyPreconditions(t *testing.T) {
4851 env : cldf.Environment {
4952 DataStore : cldfdatastore .NewMemoryDataStore ().Seal (),
5053 },
51- input : DeleteAddressRefChangesetInput {AddressRefKeys : []DeleteAddressRefKey {}},
54+ input : DeleteAddressRefChangesetInput {AddressRefKeys : []keys. AddressRefKey {}},
5255 wantErr : "missing address ref keys input" ,
5356 },
5457 {
5558 name : "failure: address ref entry does not exist" ,
5659 env : cldf.Environment {
5760 DataStore : cldfdatastore .NewMemoryDataStore ().Seal (),
5861 },
59- input : DeleteAddressRefChangesetInput {AddressRefKeys : []DeleteAddressRefKey { deleteAddressRefKey (addressRef2 )}},
62+ input : DeleteAddressRefChangesetInput {AddressRefKeys : []keys. AddressRefKey { addressRefKey (addressRef2 )}},
6063 wantErr : fmt .Sprintf ("address ref entry for chain selector %v, type %v, version %v and qualifier %q does not exist" , addressRef2 .ChainSelector , addressRef2 .Type , addressRef2 .Version , addressRef2 .Qualifier ),
6164 },
6265 }
@@ -79,7 +82,7 @@ func TestDeleteAddressRefChangeset_MissingVersion(t *testing.T) {
7982 t .Parallel ()
8083
8184 input := DeleteAddressRefChangesetInput {
82- AddressRefKeys : []DeleteAddressRefKey {{
85+ AddressRefKeys : []keys. AddressRefKey {{
8386 ChainSelector : 1234 ,
8487 Type : "MyContract" ,
8588 Qualifier : "q1" ,
@@ -117,7 +120,7 @@ func TestDeleteAddressRefChangeset_Apply(t *testing.T) {
117120 OperationsBundle : cldfoperations .NewBundle (t .Context , cldflogger .Test (t ), cldfoperations .NewMemoryReporter ()),
118121 },
119122 input : DeleteAddressRefChangesetInput {
120- AddressRefKeys : []DeleteAddressRefKey { deleteAddressRefKey (addressRef1 ), deleteAddressRefKey (addressRef2 )},
123+ AddressRefKeys : []keys. AddressRefKey { addressRefKey (addressRef1 ), addressRefKey (addressRef2 )},
121124 },
122125 wantDeletedKeys : []string {addressRef1 .Key ().String (), addressRef2 .Key ().String ()},
123126 },
@@ -141,8 +144,37 @@ func TestDeleteAddressRefChangeset_Apply(t *testing.T) {
141144 }
142145}
143146
144- func deleteAddressRefKey (ref cldfdatastore.AddressRef ) DeleteAddressRefKey {
145- return DeleteAddressRefKey {
147+ func TestDeleteAddressRefChangeset_JSONRoundTrip (t * testing.T ) {
148+ t .Parallel ()
149+
150+ version := semver .MustParse ("1.0.0" )
151+ addressRef1 := cldfdatastore.AddressRef {Address : "0x01" , ChainSelector : 1234 , Type : "MyContract" , Version : version , Qualifier : "q1" }
152+ addressRef2 := cldfdatastore.AddressRef {Address : "0x02" , ChainSelector : 5678 , Type : "OtherContract" , Version : version , Qualifier : "" }
153+
154+ raw := `{"addressRefKeys":[{"chainSelector":1234,"type":"MyContract","version":"1.0.0","qualifier":"q1"},{"chainSelector":5678,"type":"OtherContract","version":"1.0.0","qualifier":""}]}`
155+
156+ var got DeleteAddressRefChangesetInput
157+ require .NoError (t , json .Unmarshal ([]byte (raw ), & got ))
158+ require .Equal (t , []keys.AddressRefKey {addressRefKey (addressRef1 ), addressRefKey (addressRef2 )}, got .AddressRefKeys )
159+
160+ env := cldf.Environment {
161+ DataStore : testDataStoreWithAddressRefs (t , addressRef1 , addressRef2 ).Seal (),
162+ OperationsBundle : cldfoperations .NewBundle (t .Context , cldflogger .Test (t ), cldfoperations .NewMemoryReporter ()),
163+ }
164+
165+ require .NoError (t , DeleteAddressRefChangeset {}.VerifyPreconditions (env , got ))
166+
167+ out , err := DeleteAddressRefChangeset {}.Apply (env , got )
168+ require .NoError (t , err )
169+ memDS := out .DataStore .(* cldfdatastore.MemoryDataStore )
170+ require .ElementsMatch (t ,
171+ []string {addressRef1 .Key ().String (), addressRef2 .Key ().String ()},
172+ memDS .AddressRefStore .DeletedRemoteKeys ,
173+ )
174+ }
175+
176+ func addressRefKey (ref cldfdatastore.AddressRef ) keys.AddressRefKey {
177+ return keys.AddressRefKey {
146178 ChainSelector : ref .ChainSelector ,
147179 Type : ref .Type ,
148180 Version : ref .Version ,
0 commit comments