Skip to content
This repository has been archived by the owner on Aug 16, 2022. It is now read-only.

Commit

Permalink
fix: repo filters are not merged expectedly
Browse files Browse the repository at this point in the history
  • Loading branch information
rot1024 committed Mar 17, 2022
1 parent 982a71a commit f4cc3f9
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 4 deletions.
38 changes: 34 additions & 4 deletions internal/usecase/repo/container.go
Expand Up @@ -74,9 +74,24 @@ func (f TeamFilter) Clone() TeamFilter {
}

func (f TeamFilter) Merge(g TeamFilter) TeamFilter {
var r, w user.TeamIDList
if f.Readable != nil || g.Readable != nil {
if f.Readable == nil {
r = append(g.Readable[:0:0], g.Readable...)
} else {
r = append(f.Readable, g.Readable...)
}
}
if f.Writable != nil || g.Writable != nil {
if f.Writable == nil {
w = append(g.Writable[:0:0], g.Writable...)
} else {
w = append(f.Writable, g.Writable...)
}
}
return TeamFilter{
Readable: append(f.Readable, g.Readable...),
Writable: append(f.Writable, g.Writable...),
Readable: r,
Writable: w,
}
}

Expand All @@ -101,9 +116,24 @@ func SceneFilterFromOperator(o *usecase.Operator) SceneFilter {
}

func (f SceneFilter) Merge(g SceneFilter) SceneFilter {
var r, w scene.IDList
if f.Readable != nil || g.Readable != nil {
if f.Readable == nil {
r = append(g.Readable[:0:0], g.Readable...)
} else {
r = append(f.Readable, g.Readable...)
}
}
if f.Writable != nil || g.Writable != nil {
if f.Writable == nil {
w = append(g.Writable[:0:0], g.Writable...)
} else {
w = append(f.Writable, g.Writable...)
}
}
return SceneFilter{
Readable: append(f.Readable, g.Readable...),
Writable: append(f.Writable, g.Writable...),
Readable: r,
Writable: w,
}
}

Expand Down
47 changes: 47 additions & 0 deletions internal/usecase/repo/container_test.go
@@ -0,0 +1,47 @@
package repo

import (
"testing"

"github.com/reearth/reearth-backend/pkg/scene"
"github.com/reearth/reearth-backend/pkg/user"
"github.com/stretchr/testify/assert"
)

func TestTeamFilter_Merge(t *testing.T) {
a := user.NewTeamID()
b := user.NewTeamID()
assert.Equal(t, TeamFilter{
Readable: user.TeamIDList{a, b},
Writable: user.TeamIDList{b, a},
}, TeamFilter{
Readable: user.TeamIDList{a},
Writable: user.TeamIDList{b},
}.Merge(TeamFilter{
Readable: user.TeamIDList{b},
Writable: user.TeamIDList{a},
}))
assert.Equal(t, TeamFilter{Readable: user.TeamIDList{}}, TeamFilter{}.Merge(TeamFilter{Readable: user.TeamIDList{}}))
assert.Equal(t, TeamFilter{Readable: user.TeamIDList{}}, TeamFilter{Readable: user.TeamIDList{}}.Merge(TeamFilter{}))
assert.Equal(t, TeamFilter{Writable: user.TeamIDList{}}, TeamFilter{}.Merge(TeamFilter{Writable: user.TeamIDList{}}))
assert.Equal(t, TeamFilter{Writable: user.TeamIDList{}}, TeamFilter{Writable: user.TeamIDList{}}.Merge(TeamFilter{}))
}

func TestSceneFilter_Merge(t *testing.T) {
a := scene.NewID()
b := scene.NewID()
assert.Equal(t, SceneFilter{
Readable: scene.IDList{a, b},
Writable: scene.IDList{b, a},
}, SceneFilter{
Readable: scene.IDList{a},
Writable: scene.IDList{b},
}.Merge(SceneFilter{
Readable: scene.IDList{b},
Writable: scene.IDList{a},
}))
assert.Equal(t, SceneFilter{Readable: scene.IDList{}}, SceneFilter{}.Merge(SceneFilter{Readable: scene.IDList{}}))
assert.Equal(t, SceneFilter{Readable: scene.IDList{}}, SceneFilter{Readable: scene.IDList{}}.Merge(SceneFilter{}))
assert.Equal(t, SceneFilter{Writable: scene.IDList{}}, SceneFilter{}.Merge(SceneFilter{Writable: scene.IDList{}}))
assert.Equal(t, SceneFilter{Writable: scene.IDList{}}, SceneFilter{Writable: scene.IDList{}}.Merge(SceneFilter{}))
}

0 comments on commit f4cc3f9

Please sign in to comment.