From be764d62a7480991fb6f130fd88fe1a66955733a Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 08:17:13 +0700 Subject: [PATCH 1/8] buat test untuk mengecek bahwa toefl valid --- 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 f3987e8..8d25f31 100755 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -394,6 +394,11 @@ class ProfileUpdateTests(APITestCase): response = self.client.patch(url, {'GPA': "this is not a valid input"}, format='multipart') self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'TOEFL': 500}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) + self.assertEqual(response.data.get('student_toefl'), 500) + url = '/api/students/' + str(student_id) + '/profile/' response = self.client.patch(url, {'volunteer': 'Ketua BEM UI - 2020'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) -- GitLab From 21200d81a377b588d492a505b9642a72ced6cc27 Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 08:22:24 +0700 Subject: [PATCH 2/8] buat test untuk mengecek bahwa nilai tidak valid --- core/tests/test_accounts.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 8d25f31..7362036 100755 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -399,6 +399,10 @@ class ProfileUpdateTests(APITestCase): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) self.assertEqual(response.data.get('student_toefl'), 500) + url = '/api/students/' + str(student_id) + "/profile/" + response = self.client.patch(url, {'student_toefl': 'this is not valid input'}, format='multipart') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + url = '/api/students/' + str(student_id) + '/profile/' response = self.client.patch(url, {'volunteer': 'Ketua BEM UI - 2020'}, format='multipart') self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) -- GitLab From 3bd3be4b42d045bb2e56085170eaaf0a2842f78b Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 08:36:26 +0700 Subject: [PATCH 3/8] update model untuk student_toefl --- core/models/accounts.py | 1 + 1 file changed, 1 insertion(+) diff --git a/core/models/accounts.py b/core/models/accounts.py index a6bfae5..b4d64eb 100755 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -111,6 +111,7 @@ class Student(models.Model): job_seeking_status = models.CharField(max_length=30, blank=True, null=True) student_gpa = models.FloatField(db_column='student_gpa', default=1.0, blank=True, null=True, validators=[validate_student_gpa]) + student_toefl = models.CharField(max_length=3, blank=True, null=True) volunteer = models.CharField(max_length=100, blank=True, null=True) awards = models.CharField(max_length=100, blank=True, null=True) projects = models.CharField(max_length=100, blank=True, null=True) -- GitLab From 3dd976338cf6be456fe92cdac677432c49e1bb8f Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 08:48:23 +0700 Subject: [PATCH 4/8] update serializer dengan menambah student_toefl --- core/serializers/accounts.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py index 85a64b1..68de2e8 100755 --- a/core/serializers/accounts.py +++ b/core/serializers/accounts.py @@ -26,7 +26,7 @@ class StudentSerializer(serializers.ModelSerializer): 'work_experience', 'latest_work', 'latest_work_desc', 'read_no', 'volunteer', 'job_seeking_status', 'skills', 'expected_salary', 'self_description', 'github_url', 'gitlab_url', 'awards', 'certification', 'languages', 'seminar', - 'interests', 'alamat', 'projects', 'dependants'] + 'interests', 'alamat', 'projects', 'dependants', 'student_toefl'] @staticmethod def get_accepted_no(obj): @@ -66,6 +66,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'job_seeking_status': instance.job_seeking_status, 'website_url': instance.website_url, 'student_gpa': instance.student_gpa, + 'student_toefl':instance.student_toefl, 'volunteer': instance.volunteer, 'linkedin_url': instance.linkedin_url, 'hackerrank_url': instance.hackerrank_url, @@ -118,6 +119,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'job_seeking_status', instance.job_seeking_status) instance.student_gpa = validated_data.get( 'student_gpa', instance.student_gpa) + instance.student_toefl = validated_data.get('student_toefl', instance.student_toefl) instance.website_url = validated_data.get( 'website_url', instance.website_url) instance.skills = validated_data.get('skills', instance.skills) @@ -155,7 +157,7 @@ class StudentUpdateSerializer(serializers.ModelSerializer): 'work_experience', 'latest_work', 'latest_work_desc', 'volunteer', 'job_seeking_status', 'skills', 'expected_salary', 'self_description', 'github_url', 'gitlab_url', 'awards', 'certification', 'languages', 'seminar', - 'interests', 'alamat', 'projects', 'dependants'] + 'interests', 'alamat', 'projects', 'dependants', 'student_toefl'] class CompanyUpdateSerializer(serializers.ModelSerializer): -- GitLab From bba1b6ab5b369e9f8e75341d57ba53a7d290edbe Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 09:04:04 +0700 Subject: [PATCH 5/8] add field student_toefl di halaman profil --- assets/js/ProfilePage.jsx | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index 11d602b..874da93 100755 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -86,6 +86,7 @@ export default class ProfilePage extends React.Component { hackerrank_url: '', self_description: '', student_gpa: 0.0, + student_toefl: 0, website_url: '', latest_work: '', latest_work_desc: '', @@ -150,6 +151,7 @@ export default class ProfilePage extends React.Component { hackerrank_url: data.hackerrank_url, self_description: data.self_description, student_gpa: data.student_gpa, + student_toefl: data.student_toefl, website_url: data.website_url, latest_work: data.latest_work, alamat: data.alamat, @@ -694,6 +696,23 @@ export default class ProfilePage extends React.Component { name="student_gpa" /> + + + + + + + + + + +

+ {' '} + {this.state.student_toefl || 'null'} + {' '} +

+
+
+
+ -- GitLab From 003cdc0709140902e31d91b54b15bf266f08bafa Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 10:01:28 +0700 Subject: [PATCH 6/8] add field student_toefl di edit profile --- assets/js/EditProfile.jsx | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/assets/js/EditProfile.jsx b/assets/js/EditProfile.jsx index b8a2eb6..62a8386 100644 --- a/assets/js/EditProfile.jsx +++ b/assets/js/EditProfile.jsx @@ -64,6 +64,7 @@ export default class EditProfile extends React.Component { linkedin_url: '', hackerrank_url: '', student_gpa: 0.0, + student_toefl: 0, website_url: '', latest_work: '', latest_work_desc: '', @@ -104,6 +105,7 @@ export default class EditProfile extends React.Component { linkedin_url: data.linkedin_url, hackerrank_url: data.hackerrank_url, student_gpa: data.student_gpa, + student_toefl: data.student_toefl, website_url: data.website_url, latest_work: data.latest_work, latest_work_desc: data.latest_work_desc, @@ -617,6 +619,25 @@ export default class EditProfile extends React.Component { name="student_gpa" />
+ + + + + + Date: Tue, 3 Dec 2019 11:03:55 +0700 Subject: [PATCH 7/8] add migrations --- core/migrations/0001_initial.py | 31 +++++++++--------- core/migrations/0002_auto_20191116_1550.py | 37 ---------------------- core/migrations/0002_auto_20191203_1051.py | 20 ++++++++++++ core/models/accounts.py | 2 +- core/tests/test_accounts.py | 4 +-- 5 files changed, 39 insertions(+), 55 deletions(-) delete mode 100644 core/migrations/0002_auto_20191116_1550.py create mode 100644 core/migrations/0002_auto_20191203_1051.py diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index ce1063d..85a9c23 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-16 08:22 +# Generated by Django 1.11.17 on 2019-12-03 03:38 from __future__ import unicode_literals import core.lib.validators @@ -34,12 +34,12 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(auto_now_add=True)), ('updated', models.DateTimeField(auto_now=True)), ('description', models.TextField()), - ('status', models.IntegerField(default=0)), + ('status', models.IntegerField(default=0, validators=[django.core.validators.MaxValueValidator(2), django.core.validators.MinValueValidator(0)])), ('logo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_company_logo_file_path, validators=[core.lib.validators.validate_image_file_extension])), ('address', models.CharField(blank=True, max_length=1000, null=True)), - ('category', models.CharField(default=b'Belum ada kategori perusahaan', max_length=140)), + ('category', models.CharField(default='Belum ada kategori perusahaan', max_length=140)), ('size', models.CharField(blank=True, default=0, max_length=10, null=True)), - ('website', models.CharField(default=b'Belum ada link website', max_length=100)), + ('website', models.CharField(default='Belum ada link website', max_length=100)), ('linkedin_url', models.URLField(blank=True, null=True)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], @@ -52,7 +52,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('created', models.DateTimeField(auto_now_add=True)), - ('title', models.CharField(blank=True, default=b'', max_length=100)), + ('title', models.CharField(blank=True, default='', max_length=100)), ('content', models.TextField()), ('companyId', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Company')), ], @@ -64,7 +64,7 @@ class Migration(migrations.Migration): name='Recommendation', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', models.TextField()), + ('content', models.TextField(blank=True)), ('created', models.DateTimeField(auto_now_add=True)), ('updated', models.DateTimeField(auto_now=True)), ], @@ -79,16 +79,16 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(auto_now_add=True)), ('updated', models.DateTimeField(auto_now=True)), ('npm', models.IntegerField(unique=True, validators=[core.lib.validators.validate_npm])), - ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[django.core.validators.FileExtensionValidator([b'pdf'])])), + ('resume', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_resume_file_path, validators=[django.core.validators.FileExtensionValidator(['pdf'])])), ('sertifikat', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_sertifikat_file_path, validators=[core.lib.validators.validate_document_file_extension])), - ('phone_number', models.CharField(blank=True, db_index=True, max_length=100, null=True, validators=[django.core.validators.RegexValidator(b'^0\\d{1,11}$')])), + ('phone_number', models.CharField(blank=True, db_index=True, max_length=100, null=True, validators=[django.core.validators.RegexValidator('^0\\d{1,11}$')])), ('gender', models.CharField(blank=True, max_length=30, null=True)), ('birth_place', models.CharField(blank=True, max_length=30, null=True)), ('birth_date', models.DateField(blank=True, null=True)), ('major', models.CharField(blank=True, max_length=30, null=True)), ('batch', models.CharField(blank=True, max_length=4, null=True)), ('show_transcript', models.BooleanField(default=False)), - ('photo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[django.core.validators.FileExtensionValidator([b'jpg', b'jpeg', b'png'])])), + ('photo', models.FileField(blank=True, null=True, upload_to=core.models.accounts.get_student_photo_file_path, validators=[django.core.validators.FileExtensionValidator(['jpg', 'jpeg', 'png'])])), ('self_description', models.CharField(blank=True, db_index=True, max_length=500, null=True)), ('portfolio_link', models.URLField(blank=True, null=True)), ('linkedin_url', models.URLField(blank=True, null=True)), @@ -104,9 +104,10 @@ class Migration(migrations.Migration): ('github_url', models.URLField(blank=True, null=True)), ('gitlab_url', models.URLField(blank=True, null=True)), ('intro', models.CharField(blank=True, max_length=50, null=True)), - ('expected_salary', models.CharField(blank=True, max_length=10, null=True, validators=[django.core.validators.RegexValidator(b'^\\d{0,10}$')])), + ('expected_salary', models.CharField(blank=True, max_length=10, null=True, validators=[django.core.validators.RegexValidator('^\\d{0,10}$')])), ('job_seeking_status', models.CharField(blank=True, max_length=30, null=True)), - ('student_gpa', models.FloatField(blank=True, db_column=b'student_gpa', default=1.0, null=True, validators=[core.lib.validators.validate_student_gpa])), + ('student_gpa', models.FloatField(blank=True, db_column='student_gpa', default=1.0, null=True, validators=[core.lib.validators.validate_student_gpa])), + ('student_toefl', models.CharField(blank=True, max_length=3, null=True)), ('volunteer', models.CharField(blank=True, max_length=100, null=True)), ('awards', models.CharField(blank=True, max_length=100, null=True)), ('projects', models.CharField(blank=True, max_length=100, null=True)), @@ -114,7 +115,7 @@ class Migration(migrations.Migration): ('languages', models.CharField(blank=True, max_length=100, null=True)), ('seminar', models.CharField(blank=True, max_length=100, null=True)), ('interests', models.CharField(blank=True, max_length=100, null=True)), - ('dependants', models.IntegerField(blank=True, db_column=b'dependants', default=0, null=True)), + ('dependants', models.IntegerField(blank=True, db_column='dependants', default=0, null=True)), ], options={ 'ordering': ['-updated'], @@ -174,7 +175,7 @@ class Migration(migrations.Migration): name='ReasonRejected', fields=[ ('application', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='core.Application')), - ('reason', models.TextField(default=b'Tidak memenuhi kualifikasi perusahaan.')), + ('reason', models.TextField(default='Tidak memenuhi kualifikasi perusahaan.')), ], ), migrations.AddField( @@ -200,12 +201,12 @@ class Migration(migrations.Migration): migrations.AddField( model_name='recommendation', name='recommendation_giver', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='giver', to='core.Student'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='giver', to='core.Student'), ), migrations.AddField( model_name='recommendation', name='recommendation_receiver', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to='core.Student'), + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to='core.Student'), ), migrations.AddField( model_name='feedback', diff --git a/core/migrations/0002_auto_20191116_1550.py b/core/migrations/0002_auto_20191116_1550.py deleted file mode 100644 index 27fe2d0..0000000 --- a/core/migrations/0002_auto_20191116_1550.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.17 on 2019-12-01 10:01 -from __future__ import unicode_literals - -import django.core.validators -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='company', - name='status', - field=models.IntegerField(default=0, validators=[django.core.validators.MaxValueValidator(2), django.core.validators.MinValueValidator(0)]), - ), - migrations.AlterField( - model_name='recommendation', - name='content', - field=models.TextField(blank=True), - ), - migrations.AlterField( - model_name='recommendation', - name='recommendation_giver', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='giver', to='core.Student'), - ), - migrations.AlterField( - model_name='recommendation', - name='recommendation_receiver', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='receiver', to='core.Student'), - ), - ] diff --git a/core/migrations/0002_auto_20191203_1051.py b/core/migrations/0002_auto_20191203_1051.py new file mode 100644 index 0000000..ff119c5 --- /dev/null +++ b/core/migrations/0002_auto_20191203_1051.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2019-12-03 03:51 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='student', + name='student_toefl', + field=models.IntegerField(blank=True, db_column='toefl', default=0, null=True), + ), + ] diff --git a/core/models/accounts.py b/core/models/accounts.py index b4d64eb..1eed5ba 100755 --- a/core/models/accounts.py +++ b/core/models/accounts.py @@ -111,7 +111,7 @@ class Student(models.Model): job_seeking_status = models.CharField(max_length=30, blank=True, null=True) student_gpa = models.FloatField(db_column='student_gpa', default=1.0, blank=True, null=True, validators=[validate_student_gpa]) - student_toefl = models.CharField(max_length=3, blank=True, null=True) + student_toefl = models.IntegerField(db_column='toefl', default=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) projects = models.CharField(max_length=100, blank=True, null=True) diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py index 7362036..2cf9392 100755 --- a/core/tests/test_accounts.py +++ b/core/tests/test_accounts.py @@ -395,9 +395,9 @@ class ProfileUpdateTests(APITestCase): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) url = '/api/students/' + str(student_id) + "/profile/" - response = self.client.patch(url, {'TOEFL': 500}, format='multipart') + response = self.client.patch(url, {'TOEFL': 0}, format='multipart') self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) - self.assertEqual(response.data.get('student_toefl'), 500) + self.assertEqual(response.data.get('student_toefl'), 0) url = '/api/students/' + str(student_id) + "/profile/" response = self.client.patch(url, {'student_toefl': 'this is not valid input'}, format='multipart') -- GitLab From cdfa1270a65ea892f79dab571da4f6dfd219b60b Mon Sep 17 00:00:00 2001 From: Muhammad Fauzan Fikri Date: Tue, 3 Dec 2019 11:04:53 +0700 Subject: [PATCH 8/8] edit profile page --- assets/js/ProfilePage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/js/ProfilePage.jsx b/assets/js/ProfilePage.jsx index 874da93..e859db8 100755 --- a/assets/js/ProfilePage.jsx +++ b/assets/js/ProfilePage.jsx @@ -937,7 +937,7 @@ export default class ProfilePage extends React.Component {

{' '} - {this.state.student_toefl || 'null'} + {this.state.student_toefl || 'N/A'} {' '}

-- GitLab