Skip to content

Commit 61df574

Browse files
Merge pull request #6 from clean-code-projects/refactor-project-structure
Refactored project structure
2 parents 2fc5ae3 + 757d5ff commit 61df574

File tree

6 files changed

+104
-79
lines changed

6 files changed

+104
-79
lines changed

Diff for: internal/co_coders/criteria/criteria.go

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package criteria
2+
3+
// CollabStyle ..
4+
type CollabStyle int
5+
6+
const (
7+
Team CollabStyle = iota + 1
8+
Pair
9+
Mob
10+
)
11+

Diff for: internal/co_coders/match/on_collab_style.go

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package match
2+
3+
import (
4+
"github.com/clean-code-projects/co-coders-api/internal/co_coders/criteria"
5+
"github.com/clean-code-projects/co-coders-api/internal/co_coders/user"
6+
)
7+
8+
// OnCollabStyle ..
9+
func OnCollabStyle(users []user.User, collabStyle criteria.CollabStyle) (matchedUsers []user.User) {
10+
matchedUsers = []user.User{}
11+
for _, aUser := range users {
12+
if aUser.HasCollabStyle(collabStyle) {
13+
matchedUsers = append(matchedUsers, aUser)
14+
}
15+
}
16+
return matchedUsers
17+
}

Diff for: internal/co_coders/match/on_collab_style_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package match_test
2+
3+
import (
4+
"github.com/clean-code-projects/co-coders-api/internal/co_coders/criteria"
5+
"github.com/clean-code-projects/co-coders-api/internal/co_coders/match"
6+
"github.com/clean-code-projects/co-coders-api/internal/co_coders/user"
7+
"github.com/clean-code-projects/co-coders-api/internal/pkg/assert"
8+
9+
"testing"
10+
)
11+
12+
func TestMatchOnCollabStyleReturnsEmpty(t *testing.T) {
13+
style := criteria.Team
14+
actual := match.OnCollabStyle([]user.User{}, style)
15+
assert.Equals(t, []user.User{}, actual)
16+
}
17+
18+
func TestMatchOnCollabStyleReturnsNoMatch(t *testing.T) {
19+
aUser := user.New([]criteria.CollabStyle{criteria.Team})
20+
users := []user.User{aUser}
21+
style := criteria.Mob
22+
actual := match.OnCollabStyle(users, style)
23+
assert.Equals(t, []user.User{}, actual)
24+
}
25+
26+
func TestMatchOnCollabStyleReturnsAMatch(t *testing.T) {
27+
aUser := user.New([]criteria.CollabStyle{criteria.Team})
28+
users := []user.User{aUser}
29+
style := criteria.Team
30+
actual := match.OnCollabStyle(users, style)
31+
assert.Equals(t, []user.User{aUser}, actual)
32+
}
33+
34+
func TestMatchOnCollabStyleSubsetReturnsAMatch(t *testing.T) {
35+
aUser := user.New([]criteria.CollabStyle{criteria.Team, criteria.Pair})
36+
users := []user.User{aUser}
37+
criterion := criteria.Team
38+
actual := match.OnCollabStyle(users, criterion)
39+
assert.Equals(t, []user.User{aUser}, actual)
40+
}
41+

Diff for: internal/co_coders/user/user.go

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package user
2+
3+
import "github.com/clean-code-projects/co-coders-api/internal/co_coders/criteria"
4+
5+
// User ..
6+
type User struct {
7+
CollabStyles []criteria.CollabStyle
8+
}
9+
10+
// HasCollabStyle ..
11+
func (u User) HasCollabStyle(collabStyle criteria.CollabStyle) bool {
12+
for _, style := range u.CollabStyles {
13+
if style == collabStyle {
14+
return true
15+
}
16+
}
17+
return false
18+
}
19+
20+
// New ..
21+
func New(collabStyles []criteria.CollabStyle) User {
22+
return User{CollabStyles: collabStyles}
23+
}

Diff for: internal/pkg/assert/assert.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package assert
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func Equals(t *testing.T, expected interface{}, actual interface{}) {
9+
if !reflect.DeepEqual(expected, actual) {
10+
t.Errorf("%+v is not equal to %+v", expected, actual)
11+
}
12+
}

Diff for: match_test.go

-79
This file was deleted.

0 commit comments

Comments
 (0)