feat: add party-size queueing and call modes
This commit is contained in:
@@ -94,3 +94,74 @@ func TestValidateProjectSettingsETAInterval(t *testing.T) {
|
||||
t.Fatal("expected interval validation")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateProjectSettingsExperiencedPeopleStart(t *testing.T) {
|
||||
start := 120
|
||||
updates, err := validateProjectSettings(updateProjectSettingsRequest{ExperiencedPeopleStart: &start})
|
||||
if err != nil || updates["experienced_people_start"] != 120 {
|
||||
t.Fatalf("unexpected experienced people start result: %#v, %v", updates, err)
|
||||
}
|
||||
negative := -1
|
||||
if _, err := validateProjectSettings(updateProjectSettingsRequest{ExperiencedPeopleStart: &negative}); err == nil {
|
||||
t.Fatal("expected negative experienced people start to be rejected")
|
||||
}
|
||||
tooLarge := 1000000001
|
||||
if _, err := validateProjectSettings(updateProjectSettingsRequest{ExperiencedPeopleStart: &tooLarge}); err == nil {
|
||||
t.Fatal("expected oversized experienced people start to be rejected")
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateProjectSettingsPeopleAndCallModes(t *testing.T) {
|
||||
mode := model.CallModeBoth
|
||||
minParty, maxParty := 1, 8
|
||||
ticketDefault, ticketLimit := 5, 20
|
||||
peopleDefault, peopleLimit := 12, 40
|
||||
updates, err := validateProjectSettings(updateProjectSettingsRequest{
|
||||
CallMode: &mode, MinPartySize: &minParty, MaxPartySize: &maxParty,
|
||||
DefaultCallTicketCount: &ticketDefault, MaxCallTicketCount: &ticketLimit,
|
||||
DefaultCallPeopleCount: &peopleDefault, MaxCallPeopleCount: &peopleLimit,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
project := model.Project{CallBatchSize: 1, MaxCallTicketCount: 100, DefaultCallPeopleCount: 1, MaxCallPeopleCount: 100, MinPartySize: 1, MaxPartySize: 10}
|
||||
if err := validateProjectSettingsCombination(project, updates); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if updates["call_mode"] != model.CallModeBoth || updates["max_party_size"] != 8 || updates["call_batch_size"] != 5 {
|
||||
t.Fatalf("unexpected updates: %#v", updates)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateProjectSettingsAllowsTicketDefaultAboveLegacyLimit(t *testing.T) {
|
||||
value := 250
|
||||
updates, err := validateProjectSettings(updateProjectSettingsRequest{DefaultCallTicketCount: &value})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if updates["call_batch_size"] != 250 {
|
||||
t.Fatalf("updates = %#v", updates)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidateProjectSettingsRejectsInvalidCombinedRanges(t *testing.T) {
|
||||
project := model.Project{CallBatchSize: 5, MaxCallTicketCount: 10, DefaultCallPeopleCount: 5, MaxCallPeopleCount: 10, MinPartySize: 1, MaxPartySize: 6}
|
||||
if err := validateProjectSettingsCombination(project, map[string]any{"max_call_ticket_count": 4}); err == nil {
|
||||
t.Fatal("expected ticket default above limit to fail")
|
||||
}
|
||||
if err := validateProjectSettingsCombination(project, map[string]any{"min_party_size": 7}); err == nil {
|
||||
t.Fatal("expected invalid party range to fail")
|
||||
}
|
||||
}
|
||||
|
||||
func TestProjectAllowsConfiguredCallModes(t *testing.T) {
|
||||
if !projectAllowsCallMode(model.CallModeBoth, model.CallModeTicket) || !projectAllowsCallMode(model.CallModeBoth, model.CallModePeople) {
|
||||
t.Fatal("BOTH must allow ticket and people calls")
|
||||
}
|
||||
if !projectAllowsCallMode(model.CallModeTicket, model.CallModeTicket) || projectAllowsCallMode(model.CallModeTicket, model.CallModePeople) {
|
||||
t.Fatal("TICKET must allow only ticket calls")
|
||||
}
|
||||
if !projectAllowsCallMode(model.CallModePeople, model.CallModePeople) || projectAllowsCallMode(model.CallModePeople, model.CallModeTicket) {
|
||||
t.Fatal("PEOPLE must allow only people calls")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user