Skip to content

Commit

Permalink
Merge branch 'bugfix/BB-20400-impact-icons' of github.com:onepercentc…
Browse files Browse the repository at this point in the history
…lub/bluebottle into bugfix/BB-20400-impact-icons
  • Loading branch information
gannetson committed Aug 30, 2022
2 parents 3958813 + 335bfeb commit 84d2de9
Show file tree
Hide file tree
Showing 8 changed files with 126 additions and 1 deletion.
7 changes: 7 additions & 0 deletions bluebottle/activities/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class ActivitySearchFilter(ElasticSearchFilter):
'expertise.id',
'type',
'status',
'upcoming',
'location.id',
'segment',
'team_activity'
Expand Down Expand Up @@ -152,6 +153,12 @@ def get_type_filter(self, value, request):

return Term(type=value)

def get_upcoming_filter(self, value, request):
if value == 'true':
return Terms(status=['open', 'full'])
if value == 'false':
return Terms(status=['succeeded', 'partially_funded'])

def get_duration_filter(self, value, request):
start = request.GET.get('filter[start]')
end = request.GET.get('filter[end]')
Expand Down
47 changes: 47 additions & 0 deletions bluebottle/activities/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,53 @@ def test_filter_segment(self):
self.assertEqual(data['meta']['pagination']['count'], 1)
self.assertEqual(data['data'][0]['id'], str(first.pk))

def test_filter_upcoming(self):
first = DateActivityFactory.create(
status='open',
)

second = DateActivityFactory.create()
second.status = 'full'
second.save()

succeeded = DateActivityFactory.create()
succeeded.status = 'succeeded'
succeeded.save()

response = self.client.get(
self.url + '?filter[upcoming]=true',
user=self.owner
)

data = json.loads(response.content)

self.assertEqual(data['meta']['pagination']['count'], 2)
self.assertEqual(data['data'][0]['id'], str(first.pk))
self.assertEqual(data['data'][1]['id'], str(second.pk))

def test_filter_upcoming_false(self):
DateActivityFactory.create(
status='open',
)

second = DateActivityFactory.create()
second.status = 'full'
second.save()

succeeded = DateActivityFactory.create()
succeeded.status = 'succeeded'
succeeded.save()

response = self.client.get(
self.url + '?filter[upcoming]=false',
user=self.owner
)

data = json.loads(response.content)

self.assertEqual(data['meta']['pagination']['count'], 1)
self.assertEqual(data['data'][0]['id'], str(succeeded.pk))

def test_filter_segment_mismatch(self):
first = DateActivityFactory.create(
status='open',
Expand Down
8 changes: 8 additions & 0 deletions bluebottle/members/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,14 @@ class MemberPlatformSettingsAdmin(BasePlatformSettingsAdmin, NonSortableParentAd
)
}
),
(
_('Initiatives'),
{
'fields': (
'create_initiatives',
)
}
),
)

def get_fieldsets(self, request, obj=None):
Expand Down
21 changes: 21 additions & 0 deletions bluebottle/members/migrations/0062_auto_20220815_1751.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 2.2.24 on 2022-08-15 15:51

import bluebottle.bb_accounts.models
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
('members', '0061_auto_20220808_1113'),
]

operations = [
migrations.AddField(
model_name='memberplatformsettings',
name='create_initiatives',
field=models.BooleanField(default=True, help_text='Members can create activities'),
),

]
3 changes: 3 additions & 0 deletions bluebottle/members/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ class MemberPlatformSettings(BasePlatformSettings):
closed = models.BooleanField(
default=False, help_text=_('Require login before accessing the platform')
)
create_initiatives = models.BooleanField(
default=True, help_text=_('Members can create initiatives')
)
login_methods = MultiSelectField(max_length=100, choices=LOGIN_METHODS, default=['password'])
confirm_signup = models.BooleanField(
default=False, help_text=_('Require verifying the user\'s email before signup')
Expand Down
7 changes: 6 additions & 1 deletion bluebottle/members/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -226,14 +226,18 @@ class CurrentUserSerializer(BaseUserPreviewSerializer):
segments = serializers.PrimaryKeyRelatedField(
many=True, queryset=Segment.objects
)
has_initiatives = serializers.SerializerMethodField()

def get_has_initiatives(self, obj):
return obj.own_initiatives.exists()

class Meta(object):
model = BB_USER_MODEL
fields = UserPreviewSerializer.Meta.fields + (
'id_for_ember', 'primary_language', 'email', 'full_name', 'phone_number',
'last_login', 'date_joined', 'location',
'verified', 'permissions', 'matching_options_set',
'organization', 'segments', 'required'
'organization', 'segments', 'required', 'has_initiatives'
)


Expand Down Expand Up @@ -670,6 +674,7 @@ class Meta(object):
'require_address',
'require_birthdate',
'require_phone_number',
'create_initiatives'
)


Expand Down
11 changes: 11 additions & 0 deletions bluebottle/members/tests/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,17 @@ def test_require_profile_fields(self):
self.assertTrue(settings_platform.require_address)
self.assertTrue(settings_platform.require_birthdate)

def test_create_initiatives(self):
LocationFactory.create_batch(3)
self.app.set_user(self.superuser)
page = self.app.get(reverse('admin:members_memberplatformsettings_change'))
form = page.forms[0]
form['create_initiatives'].checked = True

form.submit()
settings_platform = MemberPlatformSettings.load()
self.assertTrue(settings_platform.create_initiatives)


class MemberAdminExportTest(BluebottleTestCase):
"""
Expand Down
23 changes: 23 additions & 0 deletions bluebottle/members/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

from bluebottle.auth.middleware import authorization_logger
from bluebottle.clients import properties
from bluebottle.initiatives.tests.factories import InitiativeFactory
from bluebottle.members.models import MemberPlatformSettings, UserActivity, Member
from bluebottle.offices.tests.factories import LocationFactory
from bluebottle.segments.tests.factories import SegmentTypeFactory, SegmentFactory
Expand Down Expand Up @@ -1079,6 +1080,17 @@ def test_get_current_user_with_unverified_required_location(self):
response = self.client.get(self.current_user_url, token=self.user_token)
self.assertEqual(response.json()['required'], [])

def test_get_current_user_with_initiatives(self):
InitiativeFactory.create(
owner=self.user
)
response = self.client.get(self.current_user_url, token=self.user_token)
self.assertEqual(response.json()['has_initiatives'], True)

def test_get_current_user_without_initiatives(self):
response = self.client.get(self.current_user_url, token=self.user_token)
self.assertEqual(response.json()['has_initiatives'], False)


class MemberSettingsAPITestCase(BluebottleTestCase):

Expand All @@ -1099,3 +1111,14 @@ def test_required_questions(self):
settings.save()
response = self.client.get(self.url, token=self.user_token)
self.assertEqual(response.json()['platform']['members']['required_questions_location'], 'contribution')

def test_create_initiatives(self):
settings = MemberPlatformSettings.load()
settings.create_initiatives = False
settings.save()
response = self.client.get(self.url, token=self.user_token)
self.assertEqual(response.json()['platform']['members']['create_initiatives'], False)
settings.create_initiatives = True
settings.save()
response = self.client.get(self.url, token=self.user_token)
self.assertEqual(response.json()['platform']['members']['create_initiatives'], True)

0 comments on commit 84d2de9

Please sign in to comment.