diff --git a/server/services/services_test.go b/server/services/services_test.go index 624cde7..22e35d5 100644 --- a/server/services/services_test.go +++ b/server/services/services_test.go @@ -393,4 +393,69 @@ func TestSetVote(t *testing.T) { if expected_non_member_votes != 5 || expected_member_votes != 4 { t.Errorf("Expected %d non-member votes and %d member votes, but got %d non-member votes and %d member votes", 4+1, 3+1, expected_non_member_votes, expected_member_votes) } +} + +func TestVoterAlreadyVoted(t *testing.T) { + // Preload the database with members, polls, and voters + tmp_db, err := os.CreateTemp("", "vote_test.*.db") + if err != nil { + t.Fatalf("Failed to create temporary database: %v", err) + } + defer os.Remove(tmp_db.Name()) + + init_conf := &config.Config{ + DBPath: string(tmp_db.Name()), + } + config.SetConfig(init_conf) + + err = PreLoadDB() + if err != nil { + t.Fatalf("Failed to preload database: %v", err) + } + + // Add a non-member vote + random_email := RandString(10) + "@mail.me" + vote := &models.Vote{ + PollId: 1, + Email: random_email, + Vote: true, + } + err = SetVote(vote) + if err != nil { + t.Fatalf("Failed to set non-member vote: %v", err) + } + + // Add a member vote + member_email := "test100@mail.me" + vote = &models.Vote{ + PollId: 1, + Email: member_email, + Vote: true, + } + err = SetVote(vote) + if err != nil { + t.Fatalf("Failed to set member vote: %v", err) + } + + // Attempt to add another non-member vote + vote = &models.Vote{ + PollId: 1, + Email: random_email, + Vote: true, + } + err = SetVote(vote) + if err != ErrVoterAlreadyVoted { + t.Fatalf("Expected ErrVoterAlreadyVoted, but got %v", err) + } + + // Attempt to add another member vote + vote = &models.Vote{ + PollId: 1, + Email: member_email, + Vote: true, + } + err = SetVote(vote) + if err != ErrVoterAlreadyVoted { + t.Fatalf("Expected ErrVoterAlreadyVoted, but got %v", err) + } } \ No newline at end of file