From c68acb53c8fb68a9517e51775213d4c27fb77632 Mon Sep 17 00:00:00 2001 From: The Magician Date: Thu, 12 Sep 2024 13:32:01 +0100 Subject: [PATCH] Extract filter functionality --- sevenkeys/logic/filter.go | 29 +++ sevenkeys/logic/filter_test.go | 402 +++++++++++++++++++++++++++++++++ 2 files changed, 431 insertions(+) create mode 100644 sevenkeys/logic/filter.go create mode 100644 sevenkeys/logic/filter_test.go diff --git a/sevenkeys/logic/filter.go b/sevenkeys/logic/filter.go new file mode 100644 index 0000000..e303d69 --- /dev/null +++ b/sevenkeys/logic/filter.go @@ -0,0 +1,29 @@ +package logic + +import "sevenkeys/database" + +func filterPrinting(printing database.CardPrinting, searchCriteria SearchCriteria) bool { + if searchCriteria.SetCode != "" && printing.SetCode != searchCriteria.SetCode { + return true + } + + if searchCriteria.Foil == False && printing.IsFoil { + return true + } + if searchCriteria.Foil == True && !printing.IsFoil { + return true + } + + if searchCriteria.Promo == False && printing.IsPromo { + return true + } + if searchCriteria.Promo == True && !printing.IsPromo { + return true + } + + if searchCriteria.Language != "" && printing.Language != searchCriteria.Language { + return true + } + + return false +} diff --git a/sevenkeys/logic/filter_test.go b/sevenkeys/logic/filter_test.go new file mode 100644 index 0000000..ac47f27 --- /dev/null +++ b/sevenkeys/logic/filter_test.go @@ -0,0 +1,402 @@ +package logic + +import ( + "sevenkeys/database" + "testing" +) + +func TestFilterPrinting_ReturnsTrue_IfSetCodeDoesNotMatch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "otj", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != true { + t.Errorf("filter was false") + } +} + +func TestFilterPrinting_ReturnsFalse_IfSetCodeDoesMatch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfSetCodeNotSet(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsTrue_IfFoilCardInNonFoilSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: true, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != true { + t.Errorf("filter was false") + } +} + +func TestFilterPrinting_ReturnsTrue_IfNonFoilCardInFoilSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: True, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != true { + t.Errorf("filter was false") + } +} + +func TestFilterPrinting_ReturnsFalse_IfNonFoilCardInNonFoilSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfFoilCardInFoilSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: true, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: True, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfFoilCardInEitherFoilSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: true, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: Either, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfNonFoilCardInEitherFoilSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: Either, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsTrue_IfPromoCardInNonPromoSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: true, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != true { + t.Errorf("filter was false") + } +} + +func TestFilterPrinting_ReturnsTrue_IfNonPromoCardInPromoSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: True, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != true { + t.Errorf("filter was false") + } +} + +func TestFilterPrinting_ReturnsFalse_IfNonPromoCardInNonPromoSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfPromoCardInPromoSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: true, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: True, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfPromoCardInEitherPromoSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: true, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: Either, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfNonPromoCardInEitherPromoSearch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: Either, + Language: "en", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsTrue_IfLanguageDoesNotMatch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "de", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != true { + t.Errorf("filter was false") + } +} + +func TestFilterPrinting_ReturnsFalse_IfLanguageDoesMatch(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "de", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "de", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +} + +func TestFilterPrinting_ReturnsFalse_IfLanguageNotSet(t *testing.T) { + printing := database.CardPrinting{ + SetCode: "rtr", + IsFoil: false, + IsPromo: false, + Language: "en", + } + + searchCriteria := SearchCriteria{ + SetCode: "rtr", + Foil: False, + Promo: False, + Language: "", + } + + filter := filterPrinting(printing, searchCriteria) + + if filter != false { + t.Errorf("filter was true") + } +}