From fe44078920a4edc0f2070a14526c54417dde831c Mon Sep 17 00:00:00 2001 From: Ivana Irene Thomas Date: Wed, 2 Oct 2019 09:21:21 +0700 Subject: [PATCH 1/3] add test that when student logs in, student object is also created --- core/tests/test_accounts.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 35458de..c376acd 100644 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -95,6 +95,27 @@ class RegisterTests(APITestCase): response = self.client.post(url, tc_post, format='multipart') self.assertEqual(response.status_code, status.HTTP_409_CONFLICT) + + @requests_mock.Mocker() + def test_register_student_also_create_student_object(self, m): + m.post('https://api.cs.ui.ac.id/authentication/ldap/v2/', json={ + "username": "dummy.mahasiswa", + "nama": "Dummy Mahasiswa", + "state": 1, + "kode_org": "01.00.12.01:mahasiswa", + "kodeidentitas": "1234567890", + "nama_role": "mahasiswa" + }, status_code=200) + + url='/api/login/' + + response = self.client.post(url, { 'username' : 'dummy.mahasiswa', 'password' : 'lalala', 'login-type' : 'sso-ui'}, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + + user_object = User.objects.filter(username="dummy.mahasiswa").first() + self.assertTrue(user_object) + student_object = Student.objects.filter(user=user_object).first() + self.assertTrue(student_object) def test_bad_request(self): url = '/api/register/' -- GitLab From 3f5d4a0952ae755be8e3f50cd8a330d0b347af33 Mon Sep 17 00:00:00 2001 From: Ivana Irene Thomas Date: Wed, 2 Oct 2019 09:24:02 +0700 Subject: [PATCH 2/3] remove request to student_details, create student pbject when simple information is available --- core/views/accounts.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/core/views/accounts.py b/core/views/accounts.py index 0b74350..231ab7c 100644 --- a/core/views/accounts.py +++ b/core/views/accounts.py @@ -167,15 +167,9 @@ class LoginViewSet(viewsets.GenericViewSet): login(request, user) if created: if resp.get('nama_role') == "mahasiswa": - student_detail = requests.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/{}/'.format(resp.get("kodeidentitas"))) - resp_student_detail = student_detail.json() student = Student.objects.create( user=user, npm=resp.get("kodeidentitas"), - birth_place=resp_student_detail.get('kota_lahir'), - birth_date=resp_student_detail.get('tgl_lahir'), - major=resp_student_detail.get('program')[0].get('nm_org'), - batch=resp_student_detail.get('program')[0].get('angkatan') ) student.save() else: -- GitLab From c12ef2742aa458c6ec013475c0b66e05f7a6700e Mon Sep 17 00:00:00 2001 From: Ivana Irene Thomas Date: Wed, 2 Oct 2019 10:10:37 +0700 Subject: [PATCH 3/3] allow users to edit major, batch, birth date, and birth place --- assets/js/ProfilePage.jsx | 27 ++++++++++++++++++++++----- core/serializers/accounts.py | 13 +++++++++++-- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index a9c0fc9..3c1226f 100644 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -23,8 +23,8 @@ export default class ProfilePage extends React.Component { major: '', batch: '', email: '', - cityOfBirth: '', - dateOfBirth: '', + birth_place: '', + birth_date: '', resume: '', phone_number: '', show_transcript: '', @@ -63,8 +63,8 @@ export default class ProfilePage extends React.Component { major: data.major, batch: data.batch, email: data.user.email, - cityOfBirth: data.birth_place, - dateOfBirth: data.birth_date, + birth_place: data.birth_place, + birth_date: data.birth_date, phone_number: data.phone_number, photo: data.photo, show_transcript: data.show_transcript, @@ -92,6 +92,7 @@ export default class ProfilePage extends React.Component { submitForm[key] = this.state.form[key]; } }); + console.log(submitForm) this.setState({ loading: true }); Server.submit(`/students/${this.state.id}/profile/`, submitForm, 'PATCH').then(() => { this.setState({ loading: false }); @@ -146,6 +147,22 @@ export default class ProfilePage extends React.Component { + + + + + + + + + + + + + + + + @@ -235,7 +252,7 @@ export default class ProfilePage extends React.Component { -

{ this.state.cityOfBirth || 'N/A' }, { this.state.dateOfBirth || 'N/A' }

+

{ this.state.birth_place || 'N/A' }, { this.state.birth_date || 'N/A' }

diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index e57747c..66b1717 100644 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -42,22 +42,31 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'email': instance.user.email, 'phone_number': instance.phone_number, 'photo': photo, - 'show_transcript': instance.show_transcript + 'show_transcript': instance.show_transcript, + 'birth_date': instance.birth_date, + 'birth_place': instance.birth_place, + 'major': instance.major, + 'batch': instance.batch } def update(self, instance, validated_data): + print(validated_data) instance.resume = validated_data.get('resume', instance.resume) instance.show_transcript = validated_data.get('show_transcript', instance.show_transcript) instance.phone_number = validated_data.get('phone_number', instance.phone_number) instance.photo = validated_data.get('photo', instance.photo) instance.user.email = validated_data.get('email', instance.user.email) + instance.birth_date = validated_data.get('birth_date', instance.birth_date) + instance.birth_place = validated_data.get('birth_place', instance.birth_place) + instance.major = validated_data.get('major', instance.major) + instance.batch = validated_data.get('batch', instance.batch) instance.save() instance.user.save() return instance class Meta: model = Student - fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript'] + fields = ['resume', 'email', 'phone_number', 'photo', 'show_transcript', 'birth_date', 'birth_place','major', 'batch'] class CompanyUpdateSerializer(serializers.ModelSerializer): -- GitLab