@@ -10,6 +10,7 @@ import {
1010 listSegments ,
1111 clearFilters ,
1212 openSegmentSubmenu ,
13+ locateSelectedSegmentName ,
1314 getByTableColumnText ,
1415} from "./filter-helpers" ;
1516import { test } from "./lib/fixtures" ;
@@ -126,6 +127,157 @@ test.describe("Filter Segment Functionality", () => {
126127 await deleteSegment ( page , segmentName ) ;
127128 } ) ;
128129
130+ test ( "Filter segment preferences persist in database across page reloads" , async ( {
131+ page,
132+ users,
133+ orgs,
134+ } ) => {
135+ const orgOwner = await users . create ( undefined , {
136+ hasTeam : true ,
137+ isOrg : true ,
138+ } ) ;
139+ const { team : org } = await orgOwner . getOrgMembership ( ) ;
140+
141+ const memberUser = await users . create ( {
142+ roleInOrganization : MembershipRole . MEMBER ,
143+ organizationId : org . id ,
144+ username : "member-user" ,
145+ } ) ;
146+
147+ const adminUser = await users . create ( {
148+ roleInOrganization : MembershipRole . ADMIN ,
149+ organizationId : org . id ,
150+ username : "admin-user" ,
151+ } ) ;
152+
153+ await orgOwner . apiLogin ( ) ;
154+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
155+
156+ const dataTable = page . getByTestId ( "user-list-data-table" ) ;
157+ await expect ( dataTable ) . toBeVisible ( ) ;
158+
159+ await applySelectFilter ( page , "role" , "admin" ) ;
160+ const segmentName = "Admin Only" ;
161+ await createFilterSegment ( page , segmentName ) ;
162+
163+ await expect ( getByTableColumnText ( page , "member" , adminUser . email ) ) . toBeVisible ( ) ;
164+ await expect ( getByTableColumnText ( page , "member" , memberUser . email ) ) . toBeHidden ( ) ;
165+
166+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
167+ await expect ( locateSelectedSegmentName ( page , segmentName ) ) . toBeVisible ( ) ;
168+ await expect ( dataTable ) . toBeVisible ( ) ;
169+
170+ await expect ( getByTableColumnText ( page , "member" , adminUser . email ) ) . toBeVisible ( ) ;
171+ await expect ( getByTableColumnText ( page , "member" , memberUser . email ) ) . toBeHidden ( ) ;
172+
173+ await deleteSegment ( page , segmentName ) ;
174+ } ) ;
175+
176+ test ( "Filter segment preferences persist across different browser sessions" , async ( {
177+ browser,
178+ page,
179+ users,
180+ orgs,
181+ } ) => {
182+ const orgOwner = await users . create ( undefined , {
183+ hasTeam : true ,
184+ isOrg : true ,
185+ } ) ;
186+ const { team : org } = await orgOwner . getOrgMembership ( ) ;
187+
188+ const adminUser = await users . create ( {
189+ roleInOrganization : MembershipRole . ADMIN ,
190+ organizationId : org . id ,
191+ username : "admin-user-session" ,
192+ } ) ;
193+
194+ await orgOwner . apiLogin ( ) ;
195+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
196+
197+ await expect ( page . getByTestId ( "user-list-data-table" ) ) . toBeVisible ( ) ;
198+ await applySelectFilter ( page , "role" , "admin" ) ;
199+ const segmentName = "Cross Session Admins" ;
200+ await createFilterSegment ( page , segmentName ) ;
201+
202+ const [ secondContext , secondPage ] = await orgOwner . apiLoginOnNewBrowser ( browser ) ;
203+ await secondPage . goto ( `/settings/organizations/${ org . slug } /members` ) ;
204+
205+ const dataTable = secondPage . getByTestId ( "user-list-data-table" ) ;
206+ await expect ( dataTable ) . toBeVisible ( ) ;
207+ await expect ( locateSelectedSegmentName ( secondPage , segmentName ) ) . toBeVisible ( ) ;
208+ await expect ( getByTableColumnText ( secondPage , "member" , adminUser . email ) ) . toBeVisible ( ) ;
209+
210+ await deleteSegment ( secondPage , segmentName ) ;
211+ await secondContext . close ( ) ;
212+ } ) ;
213+
214+ test ( "Team segment preferences persist in database" , async ( { page, users, prisma } ) => {
215+ const orgOwner = await users . create ( undefined , {
216+ hasTeam : true ,
217+ isOrg : true ,
218+ hasSubteam : true ,
219+ } ) ;
220+ const { team : org } = await orgOwner . getOrgMembership ( ) ;
221+ const { team : subTeam } = await orgOwner . getFirstTeamMembership ( ) ;
222+
223+ const adminUser = await users . create ( {
224+ roleInOrganization : MembershipRole . ADMIN ,
225+ organizationId : org . id ,
226+ username : "team-admin" ,
227+ } ) ;
228+
229+ await orgOwner . apiLogin ( ) ;
230+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
231+
232+ const dataTable = page . getByTestId ( "user-list-data-table" ) ;
233+ await expect ( dataTable ) . toBeVisible ( ) ;
234+
235+ await applySelectFilter ( page , "role" , "admin" ) ;
236+ const segmentName = "Team Admin" ;
237+ await createFilterSegment ( page , segmentName , {
238+ teamScope : true ,
239+ teamName : subTeam . name ,
240+ } ) ;
241+
242+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
243+ await expect ( dataTable ) . toBeVisible ( ) ;
244+ await expect ( locateSelectedSegmentName ( page , segmentName ) ) . toBeVisible ( ) ;
245+
246+ await expect ( getByTableColumnText ( page , "member" , adminUser . email ) ) . toBeVisible ( ) ;
247+
248+ await deleteSegment ( page , segmentName ) ;
249+ } ) ;
250+
251+ test ( "Filter segment preferences are isolated per table identifier" , async ( { page, users, orgs } ) => {
252+ const orgOwner = await users . create ( undefined , {
253+ hasTeam : true ,
254+ isOrg : true ,
255+ } ) ;
256+ const { team : org } = await orgOwner . getOrgMembership ( ) ;
257+
258+ const adminUser = await users . create ( {
259+ roleInOrganization : MembershipRole . ADMIN ,
260+ organizationId : org . id ,
261+ username : "admin-table-isolation" ,
262+ } ) ;
263+
264+ await orgOwner . apiLogin ( ) ;
265+
266+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
267+ await expect ( page . getByTestId ( "user-list-data-table" ) ) . toBeVisible ( ) ;
268+
269+ await applySelectFilter ( page , "role" , "admin" ) ;
270+ const membersSegmentName = "Members Table Segment" ;
271+ await createFilterSegment ( page , membersSegmentName ) ;
272+
273+ await page . goto ( `/settings/organizations/${ org . slug } /members` ) ;
274+ await expect ( page . getByTestId ( "user-list-data-table" ) ) . toBeVisible ( ) ;
275+ await expect ( locateSelectedSegmentName ( page , membersSegmentName ) ) . toBeVisible ( ) ;
276+ await expect ( getByTableColumnText ( page , "member" , adminUser . email ) ) . toBeVisible ( ) ;
277+
278+ await deleteSegment ( page , membersSegmentName ) ;
279+ } ) ;
280+
129281 test ( "Admin can create and use team scope filter segments" , async ( { page, users, prisma } ) => {
130282 const orgOwner = await users . create ( undefined , {
131283 hasTeam : true ,
0 commit comments