Ensure datascopes don't pick redundant scopes.
diff --git a/data.go b/data.go index 7d76d2f..08ff3ba 100644 --- a/data.go +++ b/data.go
@@ -165,8 +165,8 @@ } /* - * For the given apidConfigId, this function will retrieve all the scopes - * associated with it + * For the given apidConfigId, this function will retrieve all the distinch scopes + * associated with it. Distinct, because scope is already a collection of the tenants. */ func findScopesForId(configId string) (scopes []string) { @@ -175,7 +175,7 @@ var scope string db := getDB() - rows, err := db.Query("select scope from DATA_SCOPE where apid_cluster_id = $1", configId) + rows, err := db.Query("select DISTINCT scope from DATA_SCOPE where apid_cluster_id = $1", configId) if err != nil { log.Errorf("Failed to query DATA_SCOPE: %v", err) return
diff --git a/listener_test.go b/listener_test.go index 1d1e896..71adfc3 100644 --- a/listener_test.go +++ b/listener_test.go
@@ -71,9 +71,41 @@ { "id": &common.ColumnVal{Value: "i"}, "apid_cluster_id": &common.ColumnVal{Value: "a"}, - "scope": &common.ColumnVal{Value: "s"}, + "scope": &common.ColumnVal{Value: "s1"}, "org": &common.ColumnVal{Value: "o"}, - "env": &common.ColumnVal{Value: "e"}, + "env": &common.ColumnVal{Value: "e1"}, + "created": &common.ColumnVal{Value: "c"}, + "created_by": &common.ColumnVal{Value: "c"}, + "updated": &common.ColumnVal{Value: "u"}, + "updated_by": &common.ColumnVal{Value: "u"}, + }, + }, + }, + { + Name: LISTENER_TABLE_DATA_SCOPE, + Rows: []common.Row{ + { + "id": &common.ColumnVal{Value: "j"}, + "apid_cluster_id": &common.ColumnVal{Value: "a"}, + "scope": &common.ColumnVal{Value: "s1"}, + "org": &common.ColumnVal{Value: "o"}, + "env": &common.ColumnVal{Value: "e2"}, + "created": &common.ColumnVal{Value: "c"}, + "created_by": &common.ColumnVal{Value: "c"}, + "updated": &common.ColumnVal{Value: "u"}, + "updated_by": &common.ColumnVal{Value: "u"}, + }, + }, + }, + { + Name: LISTENER_TABLE_DATA_SCOPE, + Rows: []common.Row{ + { + "id": &common.ColumnVal{Value: "k"}, + "apid_cluster_id": &common.ColumnVal{Value: "a"}, + "scope": &common.ColumnVal{Value: "s2"}, + "org": &common.ColumnVal{Value: "o"}, + "env": &common.ColumnVal{Value: "e3"}, "created": &common.ColumnVal{Value: "c"}, "created_by": &common.ColumnVal{Value: "c"}, "updated": &common.ColumnVal{Value: "u"}, @@ -141,17 +173,29 @@ dds = append(dds, d) } - Expect(len(dds)).To(Equal(1)) + Expect(len(dds)).To(Equal(3)) ds := dds[0] Expect(ds.ID).To(Equal("i")) Expect(ds.Org).To(Equal("o")) - Expect(ds.Env).To(Equal("e")) - Expect(ds.Scope).To(Equal("s")) + Expect(ds.Env).To(Equal("e1")) + Expect(ds.Scope).To(Equal("s1")) Expect(ds.Created).To(Equal("c")) Expect(ds.CreatedBy).To(Equal("c")) Expect(ds.Updated).To(Equal("u")) Expect(ds.UpdatedBy).To(Equal("u")) + + ds = dds[1] + Expect(ds.Env).To(Equal("e2")) + Expect(ds.Scope).To(Equal("s1")) + ds = dds[2] + Expect(ds.Env).To(Equal("e3")) + Expect(ds.Scope).To(Equal("s2")) + + scopes := findScopesForId("a") + Expect(len(scopes)).To(Equal(2)) + Expect(scopes[0]).To(Equal("s1")) + Expect(scopes[1]).To(Equal("s2")) }) }) @@ -204,7 +248,22 @@ NewRow: common.Row{ "id": &common.ColumnVal{Value: "i"}, "apid_cluster_id": &common.ColumnVal{Value: "a"}, - "scope": &common.ColumnVal{Value: "s"}, + "scope": &common.ColumnVal{Value: "s1"}, + "org": &common.ColumnVal{Value: "o"}, + "env": &common.ColumnVal{Value: "e"}, + "created": &common.ColumnVal{Value: "c"}, + "created_by": &common.ColumnVal{Value: "c"}, + "updated": &common.ColumnVal{Value: "u"}, + "updated_by": &common.ColumnVal{Value: "u"}, + }, + }, + { + Operation: common.Insert, + Table: LISTENER_TABLE_DATA_SCOPE, + NewRow: common.Row{ + "id": &common.ColumnVal{Value: "j"}, + "apid_cluster_id": &common.ColumnVal{Value: "a"}, + "scope": &common.ColumnVal{Value: "s2"}, "org": &common.ColumnVal{Value: "o"}, "env": &common.ColumnVal{Value: "e"}, "created": &common.ColumnVal{Value: "c"}, @@ -236,17 +295,25 @@ dds = append(dds, d) } - Expect(len(dds)).To(Equal(1)) + Expect(len(dds)).To(Equal(2)) ds := dds[0] Expect(ds.ID).To(Equal("i")) Expect(ds.Org).To(Equal("o")) Expect(ds.Env).To(Equal("e")) - Expect(ds.Scope).To(Equal("s")) + Expect(ds.Scope).To(Equal("s1")) Expect(ds.Created).To(Equal("c")) Expect(ds.CreatedBy).To(Equal("c")) Expect(ds.Updated).To(Equal("u")) Expect(ds.UpdatedBy).To(Equal("u")) + + ds = dds[1] + Expect(ds.Scope).To(Equal("s2")) + + scopes := findScopesForId("a") + Expect(len(scopes)).To(Equal(2)) + Expect(scopes[0]).To(Equal("s1")) + Expect(scopes[1]).To(Equal("s2")) }) It("delete event should delete", func() {