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