Skip to content

Commit 55e8bf9

Browse files
committed
Merge branch 'dev'
2 parents 6e79b87 + 517f10e commit 55e8bf9

4 files changed

Lines changed: 161 additions & 144 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Generated by Django 4.2.3 on 2024-01-13 11:55
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("contenttypes", "0002_remove_content_type_name"),
11+
("core", "0008_auto_20231223_1331"),
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name="SkillCategory",
17+
fields=[
18+
(
19+
"id",
20+
models.BigAutoField(
21+
auto_created=True,
22+
primary_key=True,
23+
serialize=False,
24+
verbose_name="ID",
25+
),
26+
),
27+
("category", models.CharField(max_length=256)),
28+
],
29+
options={
30+
"verbose_name": "Категория навыка",
31+
"verbose_name_plural": "Категории навыков",
32+
"ordering": ["category"],
33+
},
34+
),
35+
migrations.CreateModel(
36+
name="SpecializationToObject",
37+
fields=[
38+
(
39+
"id",
40+
models.BigAutoField(
41+
auto_created=True,
42+
primary_key=True,
43+
serialize=False,
44+
verbose_name="ID",
45+
),
46+
),
47+
("object_id", models.PositiveIntegerField()),
48+
(
49+
"content_type",
50+
models.ForeignKey(
51+
on_delete=django.db.models.deletion.CASCADE,
52+
related_name="specializations",
53+
to="contenttypes.contenttype",
54+
),
55+
),
56+
(
57+
"specialization",
58+
models.ForeignKey(
59+
on_delete=django.db.models.deletion.CASCADE,
60+
related_name="specializations",
61+
to="core.specialization",
62+
),
63+
),
64+
],
65+
),
66+
migrations.AlterModelOptions(
67+
name="skill",
68+
options={
69+
"ordering": ["category", "skill"],
70+
"verbose_name": "Навык",
71+
"verbose_name_plural": "Навыки",
72+
},
73+
),
74+
migrations.DeleteModel(
75+
name="UserSkillTag",
76+
),
77+
migrations.AddField(
78+
model_name="skill",
79+
name="category",
80+
field=models.ForeignKey(
81+
default=0,
82+
on_delete=django.db.models.deletion.CASCADE,
83+
related_name="skills",
84+
to="core.skillcategory",
85+
),
86+
preserve_default=False,
87+
),
88+
]
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Generated by Django 4.2.3 on 2024-01-14 00:06
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("core", "0009_skillcategory_specializationtoobject_and_more"),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name="skill",
15+
options={
16+
"ordering": ["category", "name"],
17+
"verbose_name": "Навык",
18+
"verbose_name_plural": "Навыки",
19+
},
20+
),
21+
migrations.AlterModelOptions(
22+
name="skillcategory",
23+
options={
24+
"ordering": ["name"],
25+
"verbose_name": "Категория навыка",
26+
"verbose_name_plural": "Категории навыков",
27+
},
28+
),
29+
migrations.RenameField(
30+
model_name="skill",
31+
old_name="skill",
32+
new_name="name",
33+
),
34+
migrations.RenameField(
35+
model_name="skillcategory",
36+
old_name="category",
37+
new_name="name",
38+
),
39+
]

core/models.py

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -101,35 +101,35 @@ def __str__(self):
101101
return f"View<{self.user} - {self.content_object}>"
102102

103103

104-
class Skill(models.Model):
104+
class SkillCategory(models.Model):
105105
"""
106-
Skill model
106+
Skill category model
107107
"""
108108

109-
skill = models.CharField(max_length=256, null=False)
109+
name = models.CharField(max_length=256, null=False)
110110

111111
class Meta:
112-
verbose_name = "Навык"
113-
verbose_name_plural = "Навыки"
114-
ordering = ["skill"]
112+
verbose_name = "Категория навыка"
113+
verbose_name_plural = "Категории навыков"
114+
ordering = ["name"]
115115

116116

117-
class UserSkillTag(models.Model):
117+
class Skill(models.Model):
118118
"""
119-
User skill tag model
119+
Skill model
120120
"""
121121

122-
skill_tag = models.CharField(max_length=256, null=False)
123-
skill = models.ForeignKey(
124-
Skill,
122+
name = models.CharField(max_length=256, null=False)
123+
category = models.ForeignKey(
124+
SkillCategory,
125125
on_delete=models.CASCADE,
126-
related_name="tags",
126+
related_name="skills",
127127
)
128128

129129
class Meta:
130-
verbose_name = "Тег навыка"
131-
verbose_name_plural = "Теги навыков"
132-
ordering = ["skill_tag"]
130+
verbose_name = "Навык"
131+
verbose_name_plural = "Навыки"
132+
ordering = ["category", "name"]
133133

134134

135135
class SkillToObject(models.Model):
@@ -161,3 +161,17 @@ class Specialization(models.Model):
161161
category = models.ForeignKey(
162162
SpecializationCategory, related_name="specializations", on_delete=models.CASCADE
163163
)
164+
165+
166+
class SpecializationToObject(models.Model):
167+
specialization = models.ForeignKey(
168+
Specialization, related_name="specializations", on_delete=models.CASCADE
169+
)
170+
171+
content_type = models.ForeignKey(
172+
ContentType,
173+
on_delete=models.CASCADE,
174+
related_name="specializations",
175+
)
176+
object_id = models.PositiveIntegerField()
177+
content_object = GenericForeignKey("content_type", "object_id")

news/tests.py

Lines changed: 5 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1,129 +1,5 @@
1-
# from django.test import TestCase
2-
# from rest_framework.test import APIRequestFactory, force_authenticate
3-
# from tests.constants import USER_CREATE_DATA
4-
# from users.models import CustomUser
5-
# from users.views import UserList
6-
#
7-
# from news.models import News
8-
# from news.views import NewsDetail, NewsList
9-
#
10-
#
11-
# class NewsTestCase(TestCase):
12-
# def setUp(self):
13-
# self.factory = APIRequestFactory()
14-
#
15-
# self.user_list_view = UserList.as_view()
16-
#
17-
# self.news_list_view = NewsList.as_view()
18-
# self.news_detail_view = NewsDetail.as_view()
19-
#
20-
# self.TITLE = "Test News title"
21-
# self.TEXT = "Test News text"
22-
# self.SHORT_TEXT = "Test News short text"
23-
# self.COVER_URL = "https://example.com/"
24-
#
25-
# self.CREATE_DATA = {
26-
# "title": self.TITLE,
27-
# "text": self.TEXT,
28-
# "short_text": self.SHORT_TEXT,
29-
# "cover_url": self.COVER_URL,
30-
# }
31-
#
32-
# def test_news_creation(self):
33-
# user = self._user_create(is_staff=True)
34-
# request = self.factory.post("news/", self.CREATE_DATA)
35-
# force_authenticate(request, user=user)
36-
# response = self.news_list_view(request)
37-
#
38-
# self.assertEqual(response.status_code, 201)
39-
# self.assertEqual(response.data["title"], self.TITLE)
40-
# self.assertEqual(response.data["short_text"], self.SHORT_TEXT)
41-
# self.assertEqual(response.data["cover_url"], self.COVER_URL)
42-
#
43-
# def test_news_creation_by_not_staff_user(self):
44-
# user = self._user_create(is_staff=False)
45-
# request = self.factory.post("news/", self.CREATE_DATA)
46-
# force_authenticate(request, user=user)
47-
# response = self.news_list_view(request)
48-
#
49-
# self.assertEqual(response.status_code, 403)
50-
#
51-
# def test_news_creation_with_too_long_title(self):
52-
# user = self._user_create(is_staff=True)
53-
# new_data = self.CREATE_DATA
54-
# new_data["title"] = "too_long_string_" * 257
55-
#
56-
# request = self.factory.post("news/", new_data)
57-
# force_authenticate(request, user=user)
58-
# response = self.news_list_view(request)
59-
# self.assertEqual(response.status_code, 400)
60-
#
61-
# def test_news_creation_with_empty_title(self):
62-
# user = self._user_create(is_staff=True)
63-
# new_data = self.CREATE_DATA
64-
# new_data["title"] = ""
65-
#
66-
# request = self.factory.post("news/", new_data)
67-
# force_authenticate(request, user=user)
68-
# response = self.news_list_view(request)
69-
# self.assertEqual(response.status_code, 400)
70-
#
71-
# def test_news_creation_with_wrong_data(self):
72-
# user = self._user_create(is_staff=True)
73-
# request = self.factory.post("news/", {"wrong_field": "wrong_value"})
74-
#
75-
# force_authenticate(request, user=user)
76-
# response = self.news_list_view(request)
77-
# self.assertEqual(response.status_code, 400)
78-
#
79-
# def test_news_creation_with_empty_data(self):
80-
# user = self._user_create(is_staff=True)
81-
# request = self.factory.post("news/", {})
82-
#
83-
# force_authenticate(request, user=user)
84-
# response = self.news_list_view(request)
85-
# self.assertEqual(response.status_code, 400)
86-
#
87-
# def test_news_update(self):
88-
# user = self._user_create(is_staff=True)
89-
# request = self.factory.post("news/", self.CREATE_DATA)
90-
# force_authenticate(request, user=user)
91-
# response = self.news_list_view(request)
92-
#
93-
# news_id = response.data["id"]
94-
# news = News.objects.get(id=news_id)
95-
#
96-
# request = self.factory.patch(f"news/{news.pk}/", {"title": "New title"})
97-
# force_authenticate(request, user=user)
98-
# response = self.news_detail_view(request, pk=news.pk)
99-
#
100-
# self.assertEqual(response.status_code, 200)
101-
# self.assertEqual(response.data["title"], "New title")
102-
#
103-
# def test_news_update_with_wrong_data(self):
104-
# user = self._user_create(is_staff=True)
105-
# request = self.factory.post("news/", self.CREATE_DATA)
106-
# force_authenticate(request, user=user)
107-
# response = self.news_list_view(request)
108-
#
109-
# news_id = response.data["id"]
110-
# news = News.objects.get(id=news_id)
111-
#
112-
# new_data = self.CREATE_DATA
113-
# new_data["title"] = ""
114-
#
115-
# request = self.factory.patch(f"news/{news.pk}/", new_data)
116-
# force_authenticate(request, user=user)
117-
# response = self.news_detail_view(request, pk=news.pk)
118-
#
119-
# self.assertEqual(response.status_code, 400)
120-
#
121-
# def _user_create(self, is_staff=False):
122-
# request = self.factory.post("auth/users/", USER_CREATE_DATA)
123-
# response = self.user_list_view(request)
124-
# user_id = response.data["id"]
125-
# user = CustomUser.objects.get(id=user_id)
126-
# user.is_staff = is_staff
127-
# user.is_active = True
128-
# user.save()
129-
# return user
1+
from django.test import TestCase
2+
3+
4+
class NewsTestCase(TestCase):
5+
pass

0 commit comments

Comments
 (0)