package vote import ( "testing" "time" "codeberg.org/snonux/gorum/internal/config" ) func TestVote(t *testing.T) { t.Parallel() conf, _ := config.New(config.WithMyID("foo.zone")) v, _ := New(conf, "foo", "bar", "baz", "bay") if v.FromID != "foo.zone" { t.Errorf("Expected vote to come from foo.zone but came from %s", v.FromID) } if len(v.IDs) != 4 { t.Errorf("Expected vote length to be 4 but is %d", len(v.IDs)) } if v.IDs[0] != "foo" { t.Errorf("Expected vote 1 to be foo but is %s", v.IDs[0]) } if v.IDs[1] != "bar" { t.Errorf("Expected vote 2 to be bar but is %s", v.IDs[1]) } } func TestVoteExpiry(t *testing.T) { t.Parallel() conf, _ := config.New(config.WithMyID("foo.zone")) v, _ := New(conf, "foo", "bar", "baz", "bay") // Set expiry 1h into the future v.ExpiresAt = time.Now().Add(1 * time.Hour) if v.Expired() { t.Errorf("Didn't expect vote to be expired") } // Set expiry to now v.ExpiresAt = time.Now() if !v.Expired() { t.Errorf("Expected vote to be expired") } } func TestMarshalling(t *testing.T) { t.Parallel() conf, _ := config.New(config.WithMyID("foo.zone")) v, _ := New(conf, "foo", "bar", "baz", "bay") jsonStr, err := v.ToJSON() if err != nil { t.Errorf("unable to serialize vote to json: %v", err) } v2, err := NewFromJSON(jsonStr) if err != nil { t.Errorf("unable to deserialize json to vote: %v", err) } if !v.Equal(v2) { t.Errorf("serialized %v and deserialized %v votes differ", v, v2) } }