feat: added mlscore app
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
from apps.mlscore.models import Mlscore
|
||||||
|
|
||||||
|
|
||||||
|
class MlscoreAdmin(admin.ModelAdmin):
|
||||||
|
readonly_fields = (Mlscore.id.field.name,)
|
||||||
|
fields = (
|
||||||
|
Mlscore.id.field.name,
|
||||||
|
Mlscore.advertiser.field.name,
|
||||||
|
Mlscore.client.field.name,
|
||||||
|
Mlscore.score.field.name,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
admin.site.register(Mlscore, MlscoreAdmin)
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class MlscoreConfig(AppConfig):
|
||||||
|
name = "apps.mlscore"
|
||||||
|
label = "mlscore"
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
# Generated by Django 5.1.6 on 2025-02-14 16:40
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
import uuid
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('advertiser', '0001_initial'),
|
||||||
|
('client', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Mlscore',
|
||||||
|
fields=[
|
||||||
|
('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
|
||||||
|
('score', models.PositiveIntegerField()),
|
||||||
|
('advertiser', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mlscores', to='advertiser.advertiser')),
|
||||||
|
('client', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mlscores', to='client.client')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'unique_together': {('advertiser', 'client')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
from django.db import models
|
||||||
|
|
||||||
|
from apps.advertiser.models import Advertiser
|
||||||
|
from apps.client.models import Client
|
||||||
|
from apps.core.models import BaseModel
|
||||||
|
|
||||||
|
|
||||||
|
class Mlscore(BaseModel):
|
||||||
|
advertiser = models.ForeignKey(
|
||||||
|
Advertiser,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name="mlscores",
|
||||||
|
)
|
||||||
|
client = models.ForeignKey(
|
||||||
|
Client,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name="mlscores",
|
||||||
|
)
|
||||||
|
score = models.PositiveIntegerField()
|
||||||
|
|
||||||
|
def __str__(self) -> str:
|
||||||
|
return f"{self.advertiser.name} | {self.client.login}"
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = (
|
||||||
|
"advertiser",
|
||||||
|
"client",
|
||||||
|
)
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
from django.db.utils import IntegrityError
|
||||||
|
from django.core.exceptions import ValidationError
|
||||||
|
from config.errors import ConflictError
|
||||||
|
from apps.advertiser.models import Advertiser
|
||||||
|
from apps.client.models import Client
|
||||||
|
from apps.mlscore.models import Mlscore
|
||||||
|
|
||||||
|
|
||||||
|
class MlscoreModelTest(TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
self.advertiser = Advertiser.objects.create(name="Test Advertiser")
|
||||||
|
self.client_obj = Client.objects.create(
|
||||||
|
login="test_client",
|
||||||
|
age=25,
|
||||||
|
location="test_location",
|
||||||
|
gender=Client.GenderChoices.MALE,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_create_mlscore(self):
|
||||||
|
mlscore = Mlscore.objects.create(
|
||||||
|
advertiser=self.advertiser,
|
||||||
|
client=self.client_obj,
|
||||||
|
score=95,
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(mlscore.score, 95)
|
||||||
|
self.assertEqual(str(mlscore), "Test Advertiser | test_client")
|
||||||
|
|
||||||
|
def test_mlscore_unique_together_constraint(self):
|
||||||
|
Mlscore.objects.create(
|
||||||
|
advertiser=self.advertiser,
|
||||||
|
client=self.client_obj,
|
||||||
|
score=80,
|
||||||
|
)
|
||||||
|
|
||||||
|
with self.assertRaises(ConflictError):
|
||||||
|
Mlscore.objects.create(
|
||||||
|
advertiser=self.advertiser,
|
||||||
|
client=self.client_obj,
|
||||||
|
score=85,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_delete_advertiser_cascades(self):
|
||||||
|
mlscore = Mlscore.objects.create(
|
||||||
|
advertiser=self.advertiser,
|
||||||
|
client=self.client_obj,
|
||||||
|
score=90,
|
||||||
|
)
|
||||||
|
self.advertiser.delete()
|
||||||
|
|
||||||
|
self.assertFalse(Mlscore.objects.filter(id=mlscore.id).exists())
|
||||||
|
|
||||||
|
def test_delete_client_cascades(self):
|
||||||
|
mlscore = Mlscore.objects.create(
|
||||||
|
advertiser=self.advertiser,
|
||||||
|
client=self.client_obj,
|
||||||
|
score=90,
|
||||||
|
)
|
||||||
|
self.client_obj.delete()
|
||||||
|
|
||||||
|
self.assertFalse(Mlscore.objects.filter(id=mlscore.id).exists())
|
||||||
|
|
||||||
|
def test_score_positive_integer_constraint(self):
|
||||||
|
with self.assertRaises(ValidationError):
|
||||||
|
Mlscore.objects.create(
|
||||||
|
advertiser=self.advertiser,
|
||||||
|
client=self.client_obj,
|
||||||
|
score=-5,
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user