Skip to content

Commit 2f3796b

Browse files
committed
Merges #529 Closes #529 Fixes #528
2 parents c5497a9 + 4f2f4df commit 2f3796b

File tree

6 files changed

+62
-8
lines changed

6 files changed

+62
-8
lines changed

sortinghat/core/schema.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ class IdentityFilterType(graphene.InputObjectType):
269269
two dates, following ISO-8601 format. Examples:\n* `>=2020-10-12T09:35:06.13045+01:00` \
270270
\n * `2020-10-12T00:00:00..2020-11-22T00:00:00`.'
271271
)
272+
is_enrolled = graphene.Boolean(required=False)
272273
last_updated = graphene.String(
273274
required=False,
274275
description='Filter with a comparison operator (>, >=, <, <=) and a date OR with a range operator (..) between\
@@ -921,6 +922,8 @@ def resolve_individuals(self, info, filters=None,
921922
.filter(start__lte=date2,
922923
end__gte=date1)
923924
.values_list('individual__mk')))
925+
if filters and 'is_enrolled' in filters:
926+
query = query.filter(enrollments__isnull=not filters['is_enrolled'])
924927
if filters and 'last_updated' in filters:
925928
# Accepted date format is ISO 8601, YYYY-MM-DDTHH:MM:SS
926929
try:

tests/test_schema.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -419,6 +419,18 @@
419419
}
420420
}
421421
}"""
422+
SH_INDIVIDUALS_IS_ENROLLED_FILTER = """{
423+
individuals(filters: {isEnrolled: %s}) {
424+
entities {
425+
mk
426+
enrollments {
427+
organization {
428+
name
429+
}
430+
}
431+
}
432+
}
433+
}"""
422434
SH_INDIVIDUALS_LAST_UPDATED_FILTER = """{
423435
individuals(filters: {lastUpdated: "%s"}) {
424436
entities {
@@ -2359,6 +2371,34 @@ def test_filter_enrollment_date(self):
23592371
individuals = executed['data']['individuals']['entities']
23602372
self.assertEqual(len(individuals), 0)
23612373

2374+
def test_filter_is_enrolled(self):
2375+
"""Check whether it returns the uuids searched when using isEnrolled filter"""
2376+
2377+
org = Organization.objects.create(name='Bitergia')
2378+
indv1 = Individual.objects.create(mk='17ab00ed3825ec2f50483e33c88df223264182ba')
2379+
indv2 = Individual.objects.create(mk='c6d2504fde0e34b78a185c4b709e5442d045451c')
2380+
Enrollment.objects.create(individual=indv1, organization=org)
2381+
2382+
client = graphene.test.Client(schema)
2383+
2384+
# Test enrolled individual
2385+
executed = client.execute(SH_INDIVIDUALS_IS_ENROLLED_FILTER % 'true',
2386+
context_value=self.context_value)
2387+
individuals = executed['data']['individuals']['entities']
2388+
self.assertEqual(len(individuals), 1)
2389+
indv = individuals[0]
2390+
self.assertEqual(indv['mk'], '17ab00ed3825ec2f50483e33c88df223264182ba')
2391+
enrollment = indv['enrollments'][0]
2392+
self.assertEqual(enrollment['organization']['name'], 'Bitergia')
2393+
2394+
# Test not enrolled individual
2395+
executed = client.execute(SH_INDIVIDUALS_IS_ENROLLED_FILTER % 'false',
2396+
context_value=self.context_value)
2397+
individuals = executed['data']['individuals']['entities']
2398+
self.assertEqual(len(individuals), 1)
2399+
indv = individuals[0]
2400+
self.assertEqual(indv['mk'], 'c6d2504fde0e34b78a185c4b709e5442d045451c')
2401+
23622402
def test_filter_last_updated(self):
23632403
"""Check whether it returns the uuids searched when using a date filter"""
23642404

ui/src/components/Search.vue

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ export default {
152152
{
153153
filter: "enrollmentDate",
154154
type: "date"
155+
},
156+
{
157+
filter: "isEnrolled",
158+
type: "boolean"
155159
}
156160
]
157161
},

ui/src/views/SearchHelp.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,13 @@
202202
</tbody>
203203
</template>
204204
</v-simple-table>
205+
206+
<p class="subtitle-2 mt-8">Filter by enrollment status</p>
207+
<p>
208+
You can search for individuals based on whether they have any
209+
affiliation, using the <code>isEnrolled:true</code> and
210+
<code>isEnrolled:false</code> filters.
211+
</p>
205212
</v-card-text>
206213
</v-card>
207214
</v-main>

ui/tests/unit/__snapshots__/mutations.spec.js.snap

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ exports[`IndividualsTable Mock query for deleteIdentity 1`] = `
8787
filterselector="true"
8888
orderoptions="[object Object],[object Object],[object Object]"
8989
orderselector="true"
90-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
90+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
9191
/>
9292
9393
<v-tooltip-stub
@@ -452,7 +452,7 @@ exports[`IndividualsTable Mock query for merge 1`] = `
452452
filterselector="true"
453453
orderoptions="[object Object],[object Object],[object Object]"
454454
orderselector="true"
455-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
455+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
456456
/>
457457
458458
<v-tooltip-stub
@@ -817,7 +817,7 @@ exports[`IndividualsTable Mock query for moveIdentity 1`] = `
817817
filterselector="true"
818818
orderoptions="[object Object],[object Object],[object Object]"
819819
orderselector="true"
820-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
820+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
821821
/>
822822
823823
<v-tooltip-stub
@@ -1182,7 +1182,7 @@ exports[`IndividualsTable Mock query for unmerge 1`] = `
11821182
filterselector="true"
11831183
orderoptions="[object Object],[object Object],[object Object]"
11841184
orderselector="true"
1185-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
1185+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
11861186
/>
11871187
11881188
<v-tooltip-stub
@@ -1547,7 +1547,7 @@ exports[`IndividualsTable Mock query for updateEnrollment 1`] = `
15471547
filterselector="true"
15481548
orderoptions="[object Object],[object Object],[object Object]"
15491549
orderselector="true"
1550-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
1550+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
15511551
/>
15521552
15531553
<v-tooltip-stub
@@ -1912,7 +1912,7 @@ exports[`IndividualsTable Mock query for withdraw 1`] = `
19121912
filterselector="true"
19131913
orderoptions="[object Object],[object Object],[object Object]"
19141914
orderselector="true"
1915-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
1915+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
19161916
/>
19171917
19181918
<v-tooltip-stub

ui/tests/unit/__snapshots__/queries.spec.js.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ exports[`IndividualsTable Mock query for getCountries 1`] = `
9494
filterselector="true"
9595
orderoptions="[object Object],[object Object],[object Object]"
9696
orderselector="true"
97-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
97+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
9898
/>
9999
100100
<v-tooltip-stub
@@ -461,7 +461,7 @@ exports[`IndividualsTable Mock query for getPaginatedIndividuals 1`] = `
461461
filterselector="true"
462462
orderoptions="[object Object],[object Object],[object Object]"
463463
orderselector="true"
464-
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
464+
validfilters="[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]"
465465
/>
466466
467467
<v-tooltip-stub

0 commit comments

Comments
 (0)