@@ -10,7 +10,7 @@ import {
1010 SegmentType ,
1111 SavedSegment ,
1212 SegmentData ,
13- canSeeSegmentDetails
13+ canExpandSegment
1414} from './segments'
1515import { Filter } from '../query'
1616import { PlausibleSite } from '../site-context'
@@ -183,34 +183,124 @@ describe(`${resolveFilters.name}`, () => {
183183 )
184184} )
185185
186- describe ( `${ canSeeSegmentDetails . name } ` , ( ) => {
187- it ( 'should return true if the user is logged in and not a public role' , ( ) => {
188- const user : UserContextValue = {
189- loggedIn : true ,
190- role : Role . admin ,
191- id : 1 ,
192- team : { identifier : null , hasConsolidatedView : false }
186+ describe ( `${ canExpandSegment . name } ` , ( ) => {
187+ it . each ( [ [ Role . admin ] , [ Role . editor ] , [ Role . owner ] ] ) (
188+ 'allows expanding site segment if the user is logged in and in the role %p' ,
189+ ( role ) => {
190+ const site = { siteSegmentsAvailable : true }
191+ const user : UserContextValue = {
192+ loggedIn : true ,
193+ role,
194+ id : 1 ,
195+ team : { identifier : null , hasConsolidatedView : false }
196+ }
197+ expect (
198+ canExpandSegment ( {
199+ segment : { id : 1 , owner_id : 1 , type : SegmentType . site } ,
200+ user,
201+ site
202+ } )
203+ ) . toBe ( true )
193204 }
194- expect ( canSeeSegmentDetails ( { user } ) ) . toBe ( true )
205+ )
206+
207+ it ( 'allows expanding site segments defined by other users' , ( ) => {
208+ expect (
209+ canExpandSegment ( {
210+ segment : { id : 1 , owner_id : 222 , type : SegmentType . site } ,
211+ user : {
212+ loggedIn : true ,
213+ role : Role . owner ,
214+ id : 111 ,
215+ team : { identifier : null , hasConsolidatedView : false }
216+ } ,
217+ site : { siteSegmentsAvailable : true }
218+ } )
219+ ) . toBe ( true )
195220 } )
196221
197- it ( 'should return false if the user is not logged in' , ( ) => {
198- const user : UserContextValue = {
199- loggedIn : false ,
200- role : Role . editor ,
201- id : null ,
202- team : { identifier : null , hasConsolidatedView : false }
203- }
204- expect ( canSeeSegmentDetails ( { user } ) ) . toBe ( false )
222+ it ( 'forbids expanding site segment if site segments are not available' , ( ) => {
223+ expect (
224+ canExpandSegment ( {
225+ segment : { id : 1 , owner_id : 1 , type : SegmentType . site } ,
226+ user : {
227+ loggedIn : true ,
228+ role : Role . owner ,
229+ id : 1 ,
230+ team : { identifier : null , hasConsolidatedView : false }
231+ } ,
232+ site : { siteSegmentsAvailable : false }
233+ } )
234+ ) . toBe ( false )
205235 } )
206236
207- it ( 'should return false if the user has a public role' , ( ) => {
208- const user : UserContextValue = {
209- loggedIn : true ,
210- role : Role . public ,
211- id : 1 ,
212- team : { identifier : null , hasConsolidatedView : false }
237+ it ( 'forbids public role from expanding site segments' , ( ) => {
238+ expect (
239+ canExpandSegment ( {
240+ segment : { id : 1 , owner_id : null , type : SegmentType . site } ,
241+ user : {
242+ loggedIn : false ,
243+ role : Role . public ,
244+ id : null ,
245+ team : { identifier : null , hasConsolidatedView : false }
246+ } ,
247+ site : { siteSegmentsAvailable : false }
248+ } )
249+ ) . toBe ( false )
250+ } )
251+
252+ it . each ( [
253+ [ Role . viewer ] ,
254+ [ Role . billing ] ,
255+ [ Role . editor ] ,
256+ [ Role . admin ] ,
257+ [ Role . owner ]
258+ ] ) (
259+ 'allows expanding personal segment if it belongs to the user and the user is in role %p' ,
260+ ( role ) => {
261+ const user : UserContextValue = {
262+ loggedIn : true ,
263+ role,
264+ id : 1 ,
265+ team : { identifier : null , hasConsolidatedView : false }
266+ }
267+ expect (
268+ canExpandSegment ( {
269+ segment : { id : 1 , owner_id : 1 , type : SegmentType . personal } ,
270+ user,
271+ site : { siteSegmentsAvailable : false }
272+ } )
273+ ) . toBe ( true )
213274 }
214- expect ( canSeeSegmentDetails ( { user } ) ) . toBe ( false )
275+ )
276+
277+ it ( 'forbids expanding personal segment of other users' , ( ) => {
278+ expect (
279+ canExpandSegment ( {
280+ segment : { id : 2 , owner_id : 222 , type : SegmentType . personal } ,
281+ user : {
282+ loggedIn : true ,
283+ role : Role . owner ,
284+ id : 111 ,
285+ team : { identifier : null , hasConsolidatedView : false }
286+ } ,
287+ site : { siteSegmentsAvailable : false }
288+ } )
289+ ) . toBe ( false )
290+ } )
291+
292+ it ( 'forbids public role from expanding personal segments' , ( ) => {
293+ expect (
294+ canExpandSegment ( {
295+ segment : { id : 1 , owner_id : 1 , type : SegmentType . personal } ,
296+ user : {
297+ loggedIn : false ,
298+ role : Role . public ,
299+ id : null ,
300+ team : { identifier : null , hasConsolidatedView : false }
301+ } ,
302+ site : { siteSegmentsAvailable : false }
303+ } )
304+ ) . toBe ( false )
215305 } )
216306} )
0 commit comments