From 9ceaf581f12a585e8ffed7a504485aaa975f458f Mon Sep 17 00:00:00 2001 From: Vincent White Date: Mon, 20 Jan 2020 02:10:07 +0900 Subject: [PATCH 1/4] Refactored project structure --- internal/criteria/criteria.go | 11 +++++ internal/filter/filter.go | 17 ++++++++ internal/filter/filter_test.go | 41 ++++++++++++++++++ internal/user/user.go | 23 ++++++++++ match_test.go | 79 ---------------------------------- pkg/assert/assert.go | 12 ++++++ 6 files changed, 104 insertions(+), 79 deletions(-) create mode 100644 internal/criteria/criteria.go create mode 100644 internal/filter/filter.go create mode 100644 internal/filter/filter_test.go create mode 100644 internal/user/user.go delete mode 100644 match_test.go create mode 100644 pkg/assert/assert.go diff --git a/internal/criteria/criteria.go b/internal/criteria/criteria.go new file mode 100644 index 0000000..7431f81 --- /dev/null +++ b/internal/criteria/criteria.go @@ -0,0 +1,11 @@ +package criteria + +// CoStyle .. +type CoStyle int + +const ( + Team CoStyle = iota + 1 + Pair + Mob +) + diff --git a/internal/filter/filter.go b/internal/filter/filter.go new file mode 100644 index 0000000..3302f6e --- /dev/null +++ b/internal/filter/filter.go @@ -0,0 +1,17 @@ +package filter + +import ( + "github.com/clean-code-projects/co-coders-api/internal/criteria" + "github.com/clean-code-projects/co-coders-api/internal/user" +) + +// OnCoStyle .. +func OnCoStyle(users []user.User, coStyle criteria.CoStyle) (matchedUsers []user.User) { + matchedUsers = []user.User{} + for _, aUser := range users { + if aUser.HasCoStyle(coStyle) { + matchedUsers = append(matchedUsers, aUser) + } + } + return matchedUsers +} diff --git a/internal/filter/filter_test.go b/internal/filter/filter_test.go new file mode 100644 index 0000000..3a8986e --- /dev/null +++ b/internal/filter/filter_test.go @@ -0,0 +1,41 @@ +package filter_test + +import ( + "github.com/clean-code-projects/co-coders-api/internal/criteria" + "github.com/clean-code-projects/co-coders-api/internal/filter" + "github.com/clean-code-projects/co-coders-api/internal/user" + "github.com/clean-code-projects/co-coders-api/pkg/assert" + + "testing" +) + +func TestFilterOnCoStyleReturnsEmpty(t *testing.T) { + style := criteria.Team + actual := filter.OnCoStyle([]user.User{}, style) + assert.Equals(t, []user.User{}, actual) +} + +func TestFilterOnCoStyleReturnsNoMatch(t *testing.T) { + aUser := user.New([]criteria.CoStyle{criteria.Team}) + users := []user.User{aUser} + style := criteria.Mob + actual := filter.OnCoStyle(users, style) + assert.Equals(t, []user.User{}, actual) +} + +func TestFilterOnCoStyleReturnsAMatch(t *testing.T) { + aUser := user.New([]criteria.CoStyle{criteria.Team}) + users := []user.User{aUser} + style := criteria.Team + actual := filter.OnCoStyle(users, style) + assert.Equals(t, []user.User{aUser}, actual) +} + +func TestFilterOnCoStyleSubsetReturnsAMatch(t *testing.T) { + aUser := user.New([]criteria.CoStyle{criteria.Team, criteria.Pair}) + users := []user.User{aUser} + criterion := criteria.Team + actual := filter.OnCoStyle(users, criterion) + assert.Equals(t, []user.User{aUser}, actual) +} + diff --git a/internal/user/user.go b/internal/user/user.go new file mode 100644 index 0000000..7e4d530 --- /dev/null +++ b/internal/user/user.go @@ -0,0 +1,23 @@ +package user + +import "github.com/clean-code-projects/co-coders-api/internal/criteria" + +// User .. +type User struct { + CoStyles []criteria.CoStyle +} + +// HasCoStyle .. +func (u User) HasCoStyle(coStyle criteria.CoStyle) bool { + for _, style := range u.CoStyles { + if style == coStyle { + return true + } + } + return false +} + +// New .. +func New(coStyles []criteria.CoStyle) User { + return User{CoStyles:coStyles} +} diff --git a/match_test.go b/match_test.go deleted file mode 100644 index a39bdd2..0000000 --- a/match_test.go +++ /dev/null @@ -1,79 +0,0 @@ -package user_test - -import ( - "reflect" - "testing" -) - -type CoStyle int - -const ( - Team CoStyle = iota + 1 - Pair - Mob -) - -// User .. -type User struct { - coStyles []CoStyle -} - -func (u User) HasCoStyle(coStyle CoStyle) bool { - for _, style := range u.coStyles { - if style == coStyle { - return true - } - } - return false -} - -func FilterOnCoStyle(users []User, coStyle CoStyle) (matchedUser []User) { - matchedUser = []User{} - for _, user := range users { - if user.HasCoStyle(coStyle) { - matchedUser = append(matchedUser, user) - } - } - return matchedUser -} - -func TestMatchOnCoStyleReturnsEmpty(t *testing.T) { - users := []User{} - style := Team - actual := FilterOnCoStyle(users, style) - AssertEqual(t, []User{}, actual) -} - -func TestMatchOnCoStyleReturnsNoMatch(t *testing.T) { - user := createUser([]CoStyle{Team}) - users := []User{user} - style := Mob - actual := FilterOnCoStyle(users, style) - AssertEqual(t, []User{}, actual) -} - -func TestMatchOnCoStyleReturnsAMatch(t *testing.T) { - user := createUser([]CoStyle{Team}) - users := []User{user} - style := Team - actual := FilterOnCoStyle(users, style) - AssertEqual(t, []User{user}, actual) -} - -func TestMatchOnCoStyleSubsetReturnsAMatch(t *testing.T) { - user := createUser([]CoStyle{Team, Pair}) - users := []User{user} - criterion := Team - actual := FilterOnCoStyle(users, criterion) - AssertEqual(t, []User{user}, actual) -} - -func createUser(coStyles []CoStyle) User { - return User{coStyles: coStyles} -} - -func AssertEqual(t *testing.T, expected interface{}, actual interface{}) { - if !reflect.DeepEqual(expected, actual) { - t.Errorf("%+v is not equal to %+v", expected, actual) - } -} diff --git a/pkg/assert/assert.go b/pkg/assert/assert.go new file mode 100644 index 0000000..07f95a2 --- /dev/null +++ b/pkg/assert/assert.go @@ -0,0 +1,12 @@ +package assert + +import ( + "reflect" + "testing" +) + +func Equals(t *testing.T, expected interface{}, actual interface{}) { + if !reflect.DeepEqual(expected, actual) { + t.Errorf("%+v is not equal to %+v", expected, actual) + } +} From 29dbd35b8da429962200c48f58641057575a58ff Mon Sep 17 00:00:00 2001 From: Vincent White Date: Mon, 20 Jan 2020 12:41:05 +0900 Subject: [PATCH 2/4] Renamed coStyle to collabStyle --- internal/criteria/criteria.go | 6 +++--- internal/filter/{filter.go => on_collab_style.go} | 6 +++--- .../{filter_test.go => on_collab_style_test.go} | 14 +++++++------- internal/user/user.go | 14 +++++++------- 4 files changed, 20 insertions(+), 20 deletions(-) rename internal/filter/{filter.go => on_collab_style.go} (65%) rename internal/filter/{filter_test.go => on_collab_style_test.go} (69%) diff --git a/internal/criteria/criteria.go b/internal/criteria/criteria.go index 7431f81..01d9eb6 100644 --- a/internal/criteria/criteria.go +++ b/internal/criteria/criteria.go @@ -1,10 +1,10 @@ package criteria -// CoStyle .. -type CoStyle int +// CollabStyle .. +type CollabStyle int const ( - Team CoStyle = iota + 1 + Team CollabStyle = iota + 1 Pair Mob ) diff --git a/internal/filter/filter.go b/internal/filter/on_collab_style.go similarity index 65% rename from internal/filter/filter.go rename to internal/filter/on_collab_style.go index 3302f6e..2d4ce67 100644 --- a/internal/filter/filter.go +++ b/internal/filter/on_collab_style.go @@ -5,11 +5,11 @@ import ( "github.com/clean-code-projects/co-coders-api/internal/user" ) -// OnCoStyle .. -func OnCoStyle(users []user.User, coStyle criteria.CoStyle) (matchedUsers []user.User) { +// OnCollabStyle .. +func OnCollabStyle(users []user.User, coStyle criteria.CollabStyle) (matchedUsers []user.User) { matchedUsers = []user.User{} for _, aUser := range users { - if aUser.HasCoStyle(coStyle) { + if aUser.HasCollabStyle(coStyle) { matchedUsers = append(matchedUsers, aUser) } } diff --git a/internal/filter/filter_test.go b/internal/filter/on_collab_style_test.go similarity index 69% rename from internal/filter/filter_test.go rename to internal/filter/on_collab_style_test.go index 3a8986e..934e129 100644 --- a/internal/filter/filter_test.go +++ b/internal/filter/on_collab_style_test.go @@ -11,31 +11,31 @@ import ( func TestFilterOnCoStyleReturnsEmpty(t *testing.T) { style := criteria.Team - actual := filter.OnCoStyle([]user.User{}, style) + actual := filter.OnCollabStyle([]user.User{}, style) assert.Equals(t, []user.User{}, actual) } func TestFilterOnCoStyleReturnsNoMatch(t *testing.T) { - aUser := user.New([]criteria.CoStyle{criteria.Team}) + aUser := user.New([]criteria.CollabStyle{criteria.Team}) users := []user.User{aUser} style := criteria.Mob - actual := filter.OnCoStyle(users, style) + actual := filter.OnCollabStyle(users, style) assert.Equals(t, []user.User{}, actual) } func TestFilterOnCoStyleReturnsAMatch(t *testing.T) { - aUser := user.New([]criteria.CoStyle{criteria.Team}) + aUser := user.New([]criteria.CollabStyle{criteria.Team}) users := []user.User{aUser} style := criteria.Team - actual := filter.OnCoStyle(users, style) + actual := filter.OnCollabStyle(users, style) assert.Equals(t, []user.User{aUser}, actual) } func TestFilterOnCoStyleSubsetReturnsAMatch(t *testing.T) { - aUser := user.New([]criteria.CoStyle{criteria.Team, criteria.Pair}) + aUser := user.New([]criteria.CollabStyle{criteria.Team, criteria.Pair}) users := []user.User{aUser} criterion := criteria.Team - actual := filter.OnCoStyle(users, criterion) + actual := filter.OnCollabStyle(users, criterion) assert.Equals(t, []user.User{aUser}, actual) } diff --git a/internal/user/user.go b/internal/user/user.go index 7e4d530..715bff8 100644 --- a/internal/user/user.go +++ b/internal/user/user.go @@ -4,13 +4,13 @@ import "github.com/clean-code-projects/co-coders-api/internal/criteria" // User .. type User struct { - CoStyles []criteria.CoStyle + CollabStyles []criteria.CollabStyle } -// HasCoStyle .. -func (u User) HasCoStyle(coStyle criteria.CoStyle) bool { - for _, style := range u.CoStyles { - if style == coStyle { +// HasCollabStyle .. +func (u User) HasCollabStyle(collabStyle criteria.CollabStyle) bool { + for _, style := range u.CollabStyles { + if style == collabStyle { return true } } @@ -18,6 +18,6 @@ func (u User) HasCoStyle(coStyle criteria.CoStyle) bool { } // New .. -func New(coStyles []criteria.CoStyle) User { - return User{CoStyles:coStyles} +func New(collabStyles []criteria.CollabStyle) User { + return User{CollabStyles: collabStyles} } From 59452bd28da48951848f8e9cadd33f55c1947c99 Mon Sep 17 00:00:00 2001 From: Vincent White Date: Mon, 20 Jan 2020 12:42:14 +0900 Subject: [PATCH 3/4] Moved assert package into internal --- {pkg => internal}/assert/assert.go | 0 internal/filter/on_collab_style_test.go | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename {pkg => internal}/assert/assert.go (100%) diff --git a/pkg/assert/assert.go b/internal/assert/assert.go similarity index 100% rename from pkg/assert/assert.go rename to internal/assert/assert.go diff --git a/internal/filter/on_collab_style_test.go b/internal/filter/on_collab_style_test.go index 934e129..5c735c5 100644 --- a/internal/filter/on_collab_style_test.go +++ b/internal/filter/on_collab_style_test.go @@ -1,10 +1,10 @@ package filter_test import ( + "github.com/clean-code-projects/co-coders-api/internal/assert" "github.com/clean-code-projects/co-coders-api/internal/criteria" "github.com/clean-code-projects/co-coders-api/internal/filter" "github.com/clean-code-projects/co-coders-api/internal/user" - "github.com/clean-code-projects/co-coders-api/pkg/assert" "testing" ) From 757d5ff137264d6b11056977398974b40258fdae Mon Sep 17 00:00:00 2001 From: Vincent White Date: Mon, 20 Jan 2020 22:31:48 +0900 Subject: [PATCH 4/4] Renamed tests and created pkg and co_coders inside internal --- internal/{ => co_coders}/criteria/criteria.go | 0 internal/co_coders/match/on_collab_style.go | 17 ++++++++ .../co_coders/match/on_collab_style_test.go | 41 +++++++++++++++++++ internal/{ => co_coders}/user/user.go | 2 +- internal/filter/on_collab_style.go | 17 -------- internal/filter/on_collab_style_test.go | 41 ------------------- internal/{ => pkg}/assert/assert.go | 0 7 files changed, 59 insertions(+), 59 deletions(-) rename internal/{ => co_coders}/criteria/criteria.go (100%) create mode 100644 internal/co_coders/match/on_collab_style.go create mode 100644 internal/co_coders/match/on_collab_style_test.go rename internal/{ => co_coders}/user/user.go (82%) delete mode 100644 internal/filter/on_collab_style.go delete mode 100644 internal/filter/on_collab_style_test.go rename internal/{ => pkg}/assert/assert.go (100%) diff --git a/internal/criteria/criteria.go b/internal/co_coders/criteria/criteria.go similarity index 100% rename from internal/criteria/criteria.go rename to internal/co_coders/criteria/criteria.go diff --git a/internal/co_coders/match/on_collab_style.go b/internal/co_coders/match/on_collab_style.go new file mode 100644 index 0000000..2514ae5 --- /dev/null +++ b/internal/co_coders/match/on_collab_style.go @@ -0,0 +1,17 @@ +package match + +import ( + "github.com/clean-code-projects/co-coders-api/internal/co_coders/criteria" + "github.com/clean-code-projects/co-coders-api/internal/co_coders/user" +) + +// OnCollabStyle .. +func OnCollabStyle(users []user.User, collabStyle criteria.CollabStyle) (matchedUsers []user.User) { + matchedUsers = []user.User{} + for _, aUser := range users { + if aUser.HasCollabStyle(collabStyle) { + matchedUsers = append(matchedUsers, aUser) + } + } + return matchedUsers +} diff --git a/internal/co_coders/match/on_collab_style_test.go b/internal/co_coders/match/on_collab_style_test.go new file mode 100644 index 0000000..4ae9e5d --- /dev/null +++ b/internal/co_coders/match/on_collab_style_test.go @@ -0,0 +1,41 @@ +package match_test + +import ( + "github.com/clean-code-projects/co-coders-api/internal/co_coders/criteria" + "github.com/clean-code-projects/co-coders-api/internal/co_coders/match" + "github.com/clean-code-projects/co-coders-api/internal/co_coders/user" + "github.com/clean-code-projects/co-coders-api/internal/pkg/assert" + + "testing" +) + +func TestMatchOnCollabStyleReturnsEmpty(t *testing.T) { + style := criteria.Team + actual := match.OnCollabStyle([]user.User{}, style) + assert.Equals(t, []user.User{}, actual) +} + +func TestMatchOnCollabStyleReturnsNoMatch(t *testing.T) { + aUser := user.New([]criteria.CollabStyle{criteria.Team}) + users := []user.User{aUser} + style := criteria.Mob + actual := match.OnCollabStyle(users, style) + assert.Equals(t, []user.User{}, actual) +} + +func TestMatchOnCollabStyleReturnsAMatch(t *testing.T) { + aUser := user.New([]criteria.CollabStyle{criteria.Team}) + users := []user.User{aUser} + style := criteria.Team + actual := match.OnCollabStyle(users, style) + assert.Equals(t, []user.User{aUser}, actual) +} + +func TestMatchOnCollabStyleSubsetReturnsAMatch(t *testing.T) { + aUser := user.New([]criteria.CollabStyle{criteria.Team, criteria.Pair}) + users := []user.User{aUser} + criterion := criteria.Team + actual := match.OnCollabStyle(users, criterion) + assert.Equals(t, []user.User{aUser}, actual) +} + diff --git a/internal/user/user.go b/internal/co_coders/user/user.go similarity index 82% rename from internal/user/user.go rename to internal/co_coders/user/user.go index 715bff8..32440cd 100644 --- a/internal/user/user.go +++ b/internal/co_coders/user/user.go @@ -1,6 +1,6 @@ package user -import "github.com/clean-code-projects/co-coders-api/internal/criteria" +import "github.com/clean-code-projects/co-coders-api/internal/co_coders/criteria" // User .. type User struct { diff --git a/internal/filter/on_collab_style.go b/internal/filter/on_collab_style.go deleted file mode 100644 index 2d4ce67..0000000 --- a/internal/filter/on_collab_style.go +++ /dev/null @@ -1,17 +0,0 @@ -package filter - -import ( - "github.com/clean-code-projects/co-coders-api/internal/criteria" - "github.com/clean-code-projects/co-coders-api/internal/user" -) - -// OnCollabStyle .. -func OnCollabStyle(users []user.User, coStyle criteria.CollabStyle) (matchedUsers []user.User) { - matchedUsers = []user.User{} - for _, aUser := range users { - if aUser.HasCollabStyle(coStyle) { - matchedUsers = append(matchedUsers, aUser) - } - } - return matchedUsers -} diff --git a/internal/filter/on_collab_style_test.go b/internal/filter/on_collab_style_test.go deleted file mode 100644 index 5c735c5..0000000 --- a/internal/filter/on_collab_style_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package filter_test - -import ( - "github.com/clean-code-projects/co-coders-api/internal/assert" - "github.com/clean-code-projects/co-coders-api/internal/criteria" - "github.com/clean-code-projects/co-coders-api/internal/filter" - "github.com/clean-code-projects/co-coders-api/internal/user" - - "testing" -) - -func TestFilterOnCoStyleReturnsEmpty(t *testing.T) { - style := criteria.Team - actual := filter.OnCollabStyle([]user.User{}, style) - assert.Equals(t, []user.User{}, actual) -} - -func TestFilterOnCoStyleReturnsNoMatch(t *testing.T) { - aUser := user.New([]criteria.CollabStyle{criteria.Team}) - users := []user.User{aUser} - style := criteria.Mob - actual := filter.OnCollabStyle(users, style) - assert.Equals(t, []user.User{}, actual) -} - -func TestFilterOnCoStyleReturnsAMatch(t *testing.T) { - aUser := user.New([]criteria.CollabStyle{criteria.Team}) - users := []user.User{aUser} - style := criteria.Team - actual := filter.OnCollabStyle(users, style) - assert.Equals(t, []user.User{aUser}, actual) -} - -func TestFilterOnCoStyleSubsetReturnsAMatch(t *testing.T) { - aUser := user.New([]criteria.CollabStyle{criteria.Team, criteria.Pair}) - users := []user.User{aUser} - criterion := criteria.Team - actual := filter.OnCollabStyle(users, criterion) - assert.Equals(t, []user.User{aUser}, actual) -} - diff --git a/internal/assert/assert.go b/internal/pkg/assert/assert.go similarity index 100% rename from internal/assert/assert.go rename to internal/pkg/assert/assert.go