parent
e97c343995
commit
f41af94e52
21 changed files with 326 additions and 164 deletions
@ -0,0 +1,76 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2017-12-12 23:07 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('courses', '0002_auto_20171212_2307'), |
||||
('auth', '0008_alter_user_username_max_length'), |
||||
('maps', '0001_initial'), |
||||
('access', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='progress', |
||||
name='course', |
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='courses.Course', verbose_name='Курс'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='progress', |
||||
name='teacher', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='teacher_progress', to=settings.AUTH_USER_MODEL, verbose_name='Преподователь по умолчанию'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='progress', |
||||
name='template', |
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='maps.CourseRoute', verbose_name='Шаблон для прохождения если не указан явно смотри функцию get_template()'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='progress', |
||||
name='user', |
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Студент'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='pivotprogressvertex', |
||||
name='progress', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='access.Progress'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='pivotprogressvertex', |
||||
name='vertex', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='invite', |
||||
name='owner', |
||||
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Кому приглошение'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='account', |
||||
name='owner', |
||||
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='groups', |
||||
field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='user', |
||||
name='user_permissions', |
||||
field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), |
||||
), |
||||
migrations.AlterUniqueTogether( |
||||
name='progress', |
||||
unique_together=set([('user', 'course')]), |
||||
), |
||||
] |
||||
@ -0,0 +1,51 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2017-12-12 23:07 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('courses', '0001_initial'), |
||||
('achievements', '0001_initial'), |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='skillj', |
||||
name='lesson', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Vertex', verbose_name='Урок'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='skillj', |
||||
name='skill', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='achievements.Skills', verbose_name='Навык'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='diplomagen', |
||||
name='course', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='courses.Course'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='diploma', |
||||
name='template', |
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='achievements.DiplomaGen', verbose_name='Использовать шаблон'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='diploma', |
||||
name='user', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), |
||||
), |
||||
migrations.AddField( |
||||
model_name='achievements', |
||||
name='users', |
||||
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL), |
||||
), |
||||
] |
||||
@ -1,9 +1,7 @@ |
||||
from django.contrib import admin |
||||
|
||||
from courses.models import Course, Tutorial, Topic, Task, Vertex |
||||
from courses.models import Course, Topic, Vertex |
||||
|
||||
admin.site.register(Topic) |
||||
admin.site.register(Task) |
||||
admin.site.register(Vertex) |
||||
admin.site.register(Tutorial) |
||||
admin.site.register(Course) |
||||
@ -0,0 +1,31 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2017-12-12 23:07 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.conf import settings |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('courses', '0001_initial'), |
||||
('maps', '0001_initial'), |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AddField( |
||||
model_name='course', |
||||
name='route', |
||||
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='maps.CourseRoute', verbose_name='Порядок прохождения по умолчанию'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='course', |
||||
name='teachers', |
||||
field=models.ManyToManyField(related_name='course_teachers', to=settings.AUTH_USER_MODEL, verbose_name='Преподаватели'), |
||||
), |
||||
] |
||||
@ -1,4 +1,5 @@ |
||||
from django.contrib import admin |
||||
from storage.models import Storage |
||||
from storage.models import File, Comment |
||||
|
||||
admin.site.register(Storage) |
||||
admin.site.register(File) |
||||
admin.site.register(Comment) |
||||
@ -1,10 +1,10 @@ |
||||
from rest_framework import serializers |
||||
|
||||
from storage.models import Storage |
||||
from storage.models import File |
||||
|
||||
|
||||
class StorageSerializer(serializers.ModelSerializer): |
||||
|
||||
class Meta: |
||||
model = Storage |
||||
model = File |
||||
exclude = ('id',) |
||||
|
||||
@ -0,0 +1,28 @@ |
||||
from django.test import TestCase |
||||
from storage.views import add_comment, delete_comment, update_comment, get_comment |
||||
from django.core.files.uploadedfile import SimpleUploadedFile |
||||
|
||||
|
||||
class CommentTestCase(TestCase): |
||||
def setUp(self): |
||||
self.first_comment = add_comment("first comment", "vasia@rambler.ru") |
||||
self.second_comment = add_comment(text="Привет, отличная работа", email="artem4000@gmail.com") |
||||
|
||||
def test_comment_get(self): |
||||
self.assertEqual(self.first_comment, get_comment(self.first_comment.key)) |
||||
|
||||
def test_comment_update(self): |
||||
new_text = "Новый текст для коммента" |
||||
update_comment(key=self.first_comment.key, text=new_text) |
||||
self.assertEqual(get_comment(self.first_comment.key).text, new_text) |
||||
|
||||
def test_comment_create(self): |
||||
token = 'fskjfskj' |
||||
comment1 = add_comment(text=token, email="artem4000@gmail.com") |
||||
self.assertEqual(comment1.text, token) |
||||
file_for_upload = SimpleUploadedFile('1.txt', 'Я файл!'.encode('utf-8')) |
||||
file_name = 'Клёвый файл' |
||||
object_for_upload = {'original': file_for_upload, 'name': file_name} |
||||
comment2 = add_comment(text=token, email="artem4000@gmail.com", files=[object_for_upload]) |
||||
self.assertEqual(comment2.files.count(), 1) |
||||
self.assertEqual(comment2.files.all()[0].name, file_name) |
||||
@ -0,0 +1,47 @@ |
||||
import random |
||||
import string |
||||
|
||||
from storage.models import Comment, File |
||||
|
||||
|
||||
def add_comment(text: str, email: str, files=None) -> Comment: |
||||
""" |
||||
:param text: sting |
||||
:param email: string |
||||
:param files: {name?: string, file?: File, base64?: string}[] одно из двух последних свойств должно быть указано |
||||
:return: Comment |
||||
""" |
||||
key = ''.join(random.choice(string.ascii_letters) for _x in range(15)) |
||||
comment = Comment.objects.create( |
||||
text=text, |
||||
email=email, |
||||
key=key, |
||||
) |
||||
|
||||
if files: |
||||
for file in files: |
||||
new_file = File.objects.create(original=file['original']) |
||||
if 'name' in file.keys(): |
||||
new_file.name = file['name'] |
||||
new_file.save() |
||||
|
||||
comment.files.add(new_file) |
||||
|
||||
return comment |
||||
|
||||
|
||||
def get_comment(key): |
||||
comment = Comment.objects.get(key=key) |
||||
return comment |
||||
|
||||
|
||||
def update_comment(key, **kwargs): |
||||
comment = Comment.objects.get(key=key) |
||||
comment.__dict__.update(kwargs) |
||||
comment.save() |
||||
return comment |
||||
|
||||
|
||||
def delete_comment(key): |
||||
comment = Comment.objects.get(key=key).delete() |
||||
return comment |
||||
Loading…
Reference in new issue