From 85245e0be6e4460bc8a718fd2ce915ff7ccbfe00 Mon Sep 17 00:00:00 2001 From: tyagita Date: Thu, 14 Nov 2019 12:47:53 +0700 Subject: [PATCH 1/3] implementation test for adding language to profile --- core/tests/test_accounts.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 2e8209f..e7e0c29 100755 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -213,6 +213,11 @@ class ProfileUpdateTests(APITestCase): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.data.get('awards'), 'Juara 2 UIUX Gemastik 2019') + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'languages': 'Indonesia, Inggris'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('languages'), 'Indonesia, Inggris') + @requests_mock.Mocker() def test_student_profile_update_filetype_validation(self, m): mock_csui_oauth_verify(m) -- GitLab From 512c6ed554f1e63deda5b5253774d15c2fc40465 Mon Sep 17 00:00:00 2001 From: tyagita Date: Thu, 14 Nov 2019 13:08:23 +0700 Subject: [PATCH 2/3] Implementation code add language in profile to paass the test --- core/migrations/0001_initial.py | 3 ++- core/models/accounts.py | 1 + core/serializers/accounts.py | 9 ++++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index 02686c3..34bcd38 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.17 on 2019-11-14 02:40 +# Generated by Django 1.11.17 on 2019-11-14 05:42 from __future__ import unicode_literals import core.lib.validators @@ -93,6 +93,7 @@ class Migration(migrations.Migration): ('student_gpa', models.FloatField(blank=True, db_column=b'student_gpa', default=1.0, null=True)), ('volunteer', models.CharField(blank=True, max_length=100, null=True)), ('awards', models.CharField(blank=True, max_length=100, null=True)), + ('languages', models.CharField(blank=True, max_length=100, null=True)), ], options={ 'ordering': ['-updated'], diff --git a/core/models/accounts.py b/core/models/accounts.py index 418110a..3a662f8 100755 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -101,6 +101,7 @@ class Student(models.Model): student_gpa = models.FloatField(db_column='student_gpa', default=1.0, blank=True, null=True) volunteer = models.CharField(max_length=100, blank=True, null=True) awards = models.CharField(max_length=100, blank=True, null=True) + languages = models.CharField(max_length= 100, blank=True, null=True) @property def name(self): diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index b1bf8f5..64e299c 100755 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -22,7 +22,7 @@ class StudentSerializer(serializers.ModelSerializer): fields = ['id', 'name', 'user', 'npm', 'resume', 'phone_number', 'gender', 'birth_place', 'birth_date', 'major', 'batch', 'show_transcript', 'photo', 'accepted_no', 'linkedin_url', 'hackerrank_url', 'region', 'intro', 'portfolio_link', 'website_url', 'student_gpa', 'age', 'recommendations', 'work_experience', 'latest_work', 'latest_work_desc', 'read_no', 'volunteer', 'job_seeking_status', 'skills', 'expected_salary', - 'self_description', 'github_url', 'awards'] + 'self_description', 'github_url', 'awards', 'languages'] def get_accepted_no(self, obj): apps = Application.objects.filter(student=obj, status=4) @@ -69,7 +69,8 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'latest_work_desc': instance.latest_work_desc, 'skills': instance.skills, 'github_url': instance.github_url, - 'awards' : instance.awards + 'awards' : instance.awards, + 'languages' : instance.languages } def update(self, instance, validated_data): @@ -114,6 +115,8 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'github_url', instance.github_url) instance.awards = validated_data.get( 'awards', instance.awards) + instance.languages = validated_data.get( + 'languages', instance.languages) instance.save() instance.user.save() return instance @@ -122,7 +125,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): model = Student fields = ['resume', 'email', 'phone_number', 'gender', 'photo', 'show_transcript', 'linkedin_url', 'hackerrank_url', 'region', 'intro', 'portfolio_link', 'website_url', 'student_gpa', 'recommendations', 'work_experience', 'latest_work', 'latest_work_desc', 'volunteer', 'job_seeking_status', 'skills', 'expected_salary', - 'self_description', 'github_url', 'awards'] + 'self_description', 'github_url', 'awards', 'languages'] class CompanyUpdateSerializer(serializers.ModelSerializer): -- GitLab From 3fd76f75342c3da15bb296bdfa87d77b759925d0 Mon Sep 17 00:00:00 2001 From: tyagita Date: Thu, 14 Nov 2019 13:21:43 +0700 Subject: [PATCH 3/3] Implementation frontend for adding languange in profile --- assets/js/EditProfile.jsx | 26 +++++++++++++++++++------- assets/js/ProfilePage.jsx | 14 ++++++++++++++ package-lock.json | 10 +++++----- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx index 28fb93b..3e3da8f 100644 --- a/assets/js/EditProfile.jsx +++ b/assets/js/EditProfile.jsx @@ -55,6 +55,7 @@ export default class ProfilePage extends React.Component { latest_work_desc: '', github_url: '', awards: '', + languages: '', }, bagikanTranskrip: '', acceptedNo: 0, @@ -70,6 +71,7 @@ export default class ProfilePage extends React.Component { latest_work_desc: '', github_url: '', awards: '', + languages: '', }; this.getProfile = this.getProfile.bind(this); this.handleChange = this.handleChange.bind(this); @@ -120,6 +122,7 @@ export default class ProfilePage extends React.Component { skills: data.skills, github_url: data.github_url, awards: data.awards, + languages: data.languages, }); if (this.props.route.own) { const newSession = this.props.user.data; @@ -131,12 +134,12 @@ export default class ProfilePage extends React.Component { this.state.name = 'Gagal mendapatkan informasi'; })); } - + isFromGithubLinkValid = () => { var github_link = this.state.form.github_url; if (github_link == null) return; return github_link.includes("https://github.com/"); - } + } parseIndonesianDateFormat(dateIndex) { const monthNameIndex = { @@ -201,7 +204,7 @@ export default class ProfilePage extends React.Component { this.setState({ form, show_transcript: d.checked }); }; - handleRadioGender = (e, {value}) => { + handleRadioGender = (e, { value }) => { const form = this.state.form; form.gender = value; this.setState({ form }) @@ -222,7 +225,7 @@ export default class ProfilePage extends React.Component { gotoStudentTranscript = () => this.gotoLink(`transkrip/${this.state.id}`); - updateForm(show){ + updateForm(show) { if (show) { return ( @@ -298,7 +301,7 @@ export default class ProfilePage extends React.Component { @@ -327,7 +330,7 @@ export default class ProfilePage extends React.Component { - + @@ -356,6 +359,15 @@ export default class ProfilePage extends React.Component { name="awards" /> + + + + @@ -422,7 +434,7 @@ export default class ProfilePage extends React.Component { render() { return (
- { this.updateForm(this.props.route.own) } + {this.updateForm(this.props.route.own)}
); } diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index fe3c370..17dabb3 100755 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -55,6 +55,7 @@ export default class ProfilePage extends React.Component { latest_work_desc: '', github_url: '', awards: '', + languages: '', }, bagikanTranskrip: '', acceptedNo: 0, @@ -70,6 +71,7 @@ export default class ProfilePage extends React.Component { latest_work_desc: '', github_url: '', awards: '', + languages: '', }; this.getProfile = this.getProfile.bind(this); this.handleChange = this.handleChange.bind(this); @@ -120,6 +122,7 @@ export default class ProfilePage extends React.Component { skills: data.skills, github_url: data.github_url, awards: data.awards, + languages: data.languages, }); if (this.props.route.own) { const newSession = this.props.user.data; @@ -641,6 +644,17 @@ export default class ProfilePage extends React.Component {
+ + + + + + +

{this.state.languages|| 'N/A'}

+
+
+
+ diff --git a/package-lock.json b/package-lock.json index a851f71..224d902 100755 --- a/package-lock.json +++ b/package-lock.json @@ -7,7 +7,7 @@ "@babel/cli": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.6.3.tgz", - "integrity": "sha512-kWKOEeuylpa781yCeA5//eEx1u3WtLZqbi2VWXLKmb3QDPb5T2f7Yk311MK7bvvjR70dluAeiu4VXXsG1WwJsw==", + "integrity": "sha1-GwxiCYyKXgHkpKWaUsupaC5+CQY=", "dev": true, "requires": { "chokidar": "^2.1.8", @@ -150,7 +150,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", "dev": true } } @@ -189,7 +189,7 @@ "@babel/generator": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.3.tgz", - "integrity": "sha512-hLhYbAb3pHwxjlijC4AQ7mqZdcoujiNaW7izCT04CIowHK8psN0IN8QjDv0iyFtycF5FowUOTwDloIheI25aMw==", + "integrity": "sha1-cdU3UmT5Pse6x9nzWmcGdzP1V44=", "dev": true, "requires": { "@babel/types": "^7.6.3", @@ -201,7 +201,7 @@ "@babel/parser": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.6.3.tgz", - "integrity": "sha512-sUZdXlva1dt2Vw2RqbMkmfoImubO0D0gaCrNngV6Hi0DA4x3o4mlrq0tbfY0dZEUIccH8I6wQ4qgEtwcpOR6Qg==", + "integrity": "sha1-nv+LnD7q4Wp02NT/MNor0NbwSH4=", "dev": true }, "@babel/traverse": { @@ -14609,4 +14609,4 @@ "dev": true } } -} \ No newline at end of file +} -- GitLab