36
36
Region ,
37
37
TopicCategory ,
38
38
HierarchicalKeyword ,
39
+ GroupProfile ,
39
40
)
40
41
from geonode .facets .models import facet_registry
41
42
from geonode .facets .providers .baseinfo import FeaturedFacetProvider
42
43
from geonode .facets .providers .category import CategoryFacetProvider
44
+ from geonode .facets .providers .group import GroupFacetProvider
43
45
from geonode .facets .providers .keyword import KeywordFacetProvider
44
46
from geonode .facets .providers .region import RegionFacetProvider
45
47
from geonode .facets .views import ListFacetsView , GetFacetView
46
48
from geonode .tests .base import GeoNodeBaseTestSupport
47
-
49
+ from django . contrib . auth . models import Group
48
50
49
51
logger = logging .getLogger (__name__ )
50
52
@@ -61,6 +63,7 @@ def setUpClass(cls):
61
63
cls ._create_regions ()
62
64
cls ._create_categories ()
63
65
cls ._create_keywords ()
66
+ cls ._create_groups ()
64
67
cls ._create_resources ()
65
68
cls .rf = RequestFactory ()
66
69
@@ -123,6 +126,17 @@ def _create_categories(cls):
123
126
):
124
127
cls .cats [code ] = TopicCategory .objects .create (identifier = code , description = name , gn_description = name )
125
128
129
+ @classmethod
130
+ def _create_groups (cls ):
131
+ cls .group_admin = Group .objects .create (name = "UserAdmin" )
132
+ cls .group_common = Group .objects .create (name = "UserCommon" )
133
+ cls .group_profile_admin = GroupProfile .objects .create (
134
+ group_id = cls .group_admin , title = "UserAdmin" , slug = "UserAdmin"
135
+ )
136
+ cls .group_profile_common = GroupProfile .objects .create (
137
+ group_id = cls .group_common , title = "UserCommon" , slug = "UserCommon"
138
+ )
139
+
126
140
@classmethod
127
141
def _create_keywords (cls ):
128
142
cls .kw = {}
@@ -138,7 +152,6 @@ def _create_keywords(cls):
138
152
@classmethod
139
153
def _create_resources (self ):
140
154
public_perm_spec = {"users" : {"AnonymousUser" : ["view_resourcebase" ]}, "groups" : []}
141
-
142
155
for x in range (20 ):
143
156
d : ResourceBase = ResourceBase .objects .create (
144
157
title = f"dataset_{ x :02} " ,
@@ -152,16 +165,16 @@ def _create_resources(self):
152
165
153
166
# These are the assigned keywords to the Resources
154
167
155
- # RB00 -> T1K0 R0,R1 FEAT K0 C0
156
- # RB01 -> T0K0 T1K0 R0 FEAT K1
157
- # RB02 -> T1K0 R1 FEAT K2 C0
158
- # RB03 -> T0K0 T1K0 K0
159
- # RB04 -> T1K0 K0K1 C0
160
- # RB05 -> T0K0 T1K0 K0 K2 C1
161
- # RB06 -> T1K0 FEAT
162
- # RB07 -> T0K0 T1K0 R2 FEAT K3 C3
163
- # RB08 -> T1K0 T1K1 R1,R2 FEAT K3 C3
164
- # RB09 -> T0K0 T1K0 T1K1 R2 K3 C3
168
+ # RB00 -> T1K0 R0,R1 FEAT K0 C0 group_admin
169
+ # RB01 -> T0K0 T1K0 R0 FEAT K1 group_admin
170
+ # RB02 -> T1K0 R1 FEAT K2 C0 group_admin
171
+ # RB03 -> T0K0 T1K0 K0 group_admin
172
+ # RB04 -> T1K0 K0K1 C0 group_admin
173
+ # RB05 -> T0K0 T1K0 K0 K2 C1 group_admin
174
+ # RB06 -> T1K0 FEAT group_admin
175
+ # RB07 -> T0K0 T1K0 R2 FEAT K3 C3 group_common
176
+ # RB08 -> T1K0 T1K1 R1,R2 FEAT K3 C3 group_common
177
+ # RB09 -> T0K0 T1K0 T1K1 R2 K3 C3 group_common
165
178
# RB10 -> T1K1 R2 K3 C3
166
179
# RB11 -> T0K0 T0K1 T1K1
167
180
# RB12 -> T1K1 FEAT
@@ -173,6 +186,14 @@ def _create_resources(self):
173
186
# RB18 -> FEAT C2
174
187
# RB19 -> T0K0 T0K1 FEAT C2
175
188
189
+ if x < 7 :
190
+ logger .debug (f"ASSIGNING GROUP { self .group_admin .name } TO RB { d } " )
191
+ d .group = self .group_admin
192
+
193
+ if 7 <= x < 10 :
194
+ logger .debug (f"ASSIGNING GROUP { self .group_common .name } TO RB { d } " )
195
+ d .group = self .group_common
196
+
176
197
if x % 2 == 1 :
177
198
logger .debug (f"ADDING KEYWORDS { self .thesauri_k ['0_0' ]} to RB { d } " )
178
199
d .tkeywords .add (self .thesauri_k ["0_0" ])
@@ -227,9 +248,9 @@ def test_facets_base(self):
227
248
obj = json .loads (res .content )
228
249
self .assertIn ("facets" , obj )
229
250
facets_list = obj ["facets" ]
230
- self .assertEqual (8 , len (facets_list ))
251
+ self .assertEqual (9 , len (facets_list ))
231
252
fmap = self ._facets_to_map (facets_list )
232
- for name in ("category" , "owner" , "t_0" , "t_1" , "featured" , "resourcetype" , "keyword" ):
253
+ for name in ("group" , " category" , "owner" , "t_0" , "t_1" , "featured" , "resourcetype" , "keyword" ):
233
254
self .assertIn (name , fmap )
234
255
235
256
def test_facets_rich (self ):
@@ -247,7 +268,7 @@ def test_facets_rich(self):
247
268
obj = json .loads (res .content )
248
269
249
270
facets_list = obj ["facets" ]
250
- self .assertEqual (8 , len (facets_list ))
271
+ self .assertEqual (9 , len (facets_list ))
251
272
fmap = self ._facets_to_map (facets_list )
252
273
for expected in ( # fmt: skip
253
274
{
@@ -496,6 +517,12 @@ def test_count0(self):
496
517
kwflt = kwinfo ["filter" ]
497
518
kwname = kwinfo ["name" ]
498
519
520
+ groupinfo = GroupFacetProvider ().get_info ()
521
+ grflt = groupinfo ["filter" ]
522
+ grname = groupinfo ["name" ]
523
+ g_admin_id = self .group_admin .id
524
+ g_comm_id = self .group_common .id
525
+
499
526
t0flt = facet_registry .get_provider ("t_0" ).get_info ()["filter" ]
500
527
t1flt = facet_registry .get_provider ("t_1" ).get_info ()["filter" ]
501
528
@@ -525,6 +552,13 @@ def t(tk):
525
552
(regname , {t1flt : [t ("1_1" ), t ("1_0" )]}, {"R0" : 2 , "R1" : 3 , "R2" : 4 }),
526
553
(regname , {t1flt : t ("1_1" ), "key" : ["R0" , "R1" ]}, {"R1" : 1 , "R0" : None }),
527
554
(regname , {t1flt : t ("1_1" ), "key" : ["R0" ]}, {"R0" : None }),
555
+ # groups
556
+ (grname , {grflt : [g_admin_id , g_comm_id ], "key" : [g_admin_id , g_comm_id ]}, {g_admin_id : 7 , g_comm_id : 3 }),
557
+ (grname , {grflt : [g_admin_id ], "key" : [g_admin_id ]}, {g_admin_id : 7 }),
558
+ (grname , {catflt : ["C0" ], grflt : [g_comm_id ]}, {}),
559
+ (grname , {catflt : ["C1" ], grflt : [g_admin_id ]}, {g_admin_id : 1 }),
560
+ (grname , {catflt : ["C0" ], grflt : [g_admin_id ]}, {g_admin_id : 3 }),
561
+ (grname , {catflt : ["C0" , "C1" ], grflt : [g_admin_id , g_comm_id ]}, {g_admin_id : 4 }),
528
562
# category
529
563
(catname , {t1flt : t ("1_0" )}, {"C0" : 3 , "C1" : 1 , "C3" : 3 }),
530
564
(catname , {t1flt : t ("1_0" ), "key" : ["C0" , "C2" ]}, {"C0" : 3 , "C2" : None }),
@@ -564,4 +598,74 @@ def test_thesauri_reloading(self):
564
598
# Thesauri facets are cached.
565
599
# Make sure that when Thesauri or ThesauriLabel change the facets cache is invalidated
566
600
# TODO impl+test
601
+
567
602
pass
603
+
604
+ def test_group_facet_api_call (self ):
605
+ resource_count_admin = 7
606
+ resource_count_common = 3
607
+
608
+ expected_response_base = {
609
+ "name" : "group" ,
610
+ "filter" : "filter{group.in}" ,
611
+ "label" : "Group" ,
612
+ "type" : "group" ,
613
+ "topics" : {
614
+ "page" : 0 ,
615
+ "page_size" : 10 ,
616
+ "start" : 0 ,
617
+ "total" : 2 ,
618
+ "items" : [
619
+ {
620
+ "key" : self .group_profile_admin .group_id ,
621
+ "label" : self .group_profile_admin .slug ,
622
+ "count" : resource_count_admin ,
623
+ },
624
+ {
625
+ "key" : self .group_profile_common .group_id ,
626
+ "label" : self .group_profile_common .slug ,
627
+ "count" : resource_count_common ,
628
+ },
629
+ ],
630
+ },
631
+ }
632
+ expected_response_filtered = {
633
+ "name" : "group" ,
634
+ "filter" : "filter{group.in}" ,
635
+ "label" : "Group" ,
636
+ "type" : "group" ,
637
+ "topics" : {
638
+ "page" : 0 ,
639
+ "page_size" : 10 ,
640
+ "start" : 0 ,
641
+ "total" : 1 ,
642
+ "items" : [
643
+ {
644
+ "key" : self .group_profile_admin .group_id ,
645
+ "label" : self .group_profile_admin .slug ,
646
+ "count" : resource_count_admin ,
647
+ }
648
+ ],
649
+ },
650
+ }
651
+
652
+ url_filtered = f"{ reverse ('get_facet' ,args = ['group' ])} ?filter{{group.in}}={ self .group_admin .id } &include_topics=true&key={ self .group_admin .id } "
653
+ url_base = f"{ reverse ('get_facet' ,args = ['group' ])} "
654
+
655
+ response_filtered = self .client .get (url_filtered )
656
+ response_dict_filtered = response_filtered .json ()
657
+
658
+ response_base = self .client .get (url_base )
659
+ response_dict_base = response_base .json ()
660
+
661
+ self .assertEqual (
662
+ response_filtered .status_code ,
663
+ 200 ,
664
+ "Unexpected status code, got %s expected 200" % (response_filtered .status_code ),
665
+ )
666
+ self .assertEqual (
667
+ response_base .status_code , 200 , "Unexpected status code, got %s expected 200" % (response_base .status_code )
668
+ )
669
+
670
+ self .assertDictEqual (expected_response_filtered , response_dict_filtered )
671
+ self .assertDictEqual (expected_response_base , response_dict_base )
0 commit comments