From f9a68348c3d22bf2259b5b25fbdf015b44e998e6 Mon Sep 17 00:00:00 2001 From: Pavlo Mishchenko Date: Tue, 13 May 2025 16:06:12 +0300 Subject: [PATCH] Run fixtures tests --- tests/_utils/setup.sql | 36 ++++++++++++++++++++++++++ tests/fixtures/models.py | 56 +++++++++++++++++++++++++++++++++++----- 2 files changed, 85 insertions(+), 7 deletions(-) diff --git a/tests/_utils/setup.sql b/tests/_utils/setup.sql index 4395a57ba901..b7b416b35cd5 100644 --- a/tests/_utils/setup.sql +++ b/tests/_utils/setup.sql @@ -514,4 +514,40 @@ CREATE TABLE `generic_relations_regress_organization_contact` ( UNIQUE KEY (`organization_id`, `contact_id`), KEY (`organization_id`), KEY (`contact_id`) + +-- fixtures +CREATE TABLE `fixtures_blog_article` ( + `blog_id` BIGINT NOT NULL, + `article_id` BIGINT NOT NULL, + SHARD KEY (`blog_id`), + UNIQUE KEY (`blog_id`, `article_id`), + KEY (`blog_id`), + KEY (`article_id`) +); + +CREATE TABLE `fixtures_visa_permission` ( + `visa_id` BIGINT NOT NULL, + `permission_id` BIGINT NOT NULL, + SHARD KEY (`visa_id`), + UNIQUE KEY (`visa_id`, `permission_id`), + KEY (`visa_id`), + KEY (`permission_id`) +); + +CREATE TABLE `fixtures_book_person` ( + `book_id` BIGINT NOT NULL, + `person_id` TEXT NOT NULL, + SHARD KEY (`book_id`), + UNIQUE KEY (`book_id`, `person_id`), + KEY (`book_id`), + KEY (`person_id`) +); + +CREATE TABLE `fixtures_naturalkeything_naturalkeything` ( + `from_naturalkeything_id` TEXT NOT NULL, + `to_naturalkeything_id` TEXT NOT NULL, + SHARD KEY (`from_naturalkeything_id`), + UNIQUE KEY (`from_naturalkeything_id`, `to_naturalkeything_id`), + KEY (`from_naturalkeything_id`), + KEY (`to_naturalkeything_id`) ); diff --git a/tests/fixtures/models.py b/tests/fixtures/models.py index 37b0066d70c3..2ae62378b7e9 100644 --- a/tests/fixtures/models.py +++ b/tests/fixtures/models.py @@ -15,6 +15,8 @@ from django.contrib.contenttypes.models import ContentType from django.db import models +from django_singlestore.schema import ModelStorageManager + class Category(models.Model): title = models.CharField(max_length=100) @@ -44,13 +46,21 @@ class Blog(models.Model): Article, models.CASCADE, related_name="fixtures_featured_set" ) articles = models.ManyToManyField( - Article, blank=True, related_name="fixtures_articles_set" - ) + Article, blank=True, related_name="fixtures_articles_set", through="BlogArticle") def __str__(self): return self.name +class BlogArticle(models.Model): + blog = models.ForeignKey(Blog, on_delete=models.CASCADE) + article = models.ForeignKey(Article, on_delete=models.CASCADE) + + class Meta: + unique_together = (('blog', 'article'),) + db_table = "fixtures_blog_article" + + class Tag(models.Model): name = models.CharField(max_length=100) tagged_type = models.ForeignKey( @@ -74,7 +84,7 @@ def get_by_natural_key(self, name): class Person(models.Model): objects = PersonManager() - name = models.CharField(max_length=100, unique=True) + name = models.CharField(max_length=100, primary_key=True) class Meta: ordering = ("name",) @@ -103,7 +113,7 @@ class Meta: class Visa(models.Model): person = models.ForeignKey(Person, models.CASCADE) - permissions = models.ManyToManyField(Permission, blank=True) + permissions = models.ManyToManyField(Permission, blank=True, through="VisaPermission") def __str__(self): return "%s %s" % ( @@ -112,9 +122,18 @@ def __str__(self): ) +class VisaPermission(models.Model): + visa = models.ForeignKey(Visa, on_delete=models.CASCADE) + permission = models.ForeignKey(Permission, on_delete=models.CASCADE) + + class Meta: + unique_together = (('visa', 'permission'),) + db_table = "fixtures_visa_permission" + + class Book(models.Model): name = models.CharField(max_length=100) - authors = models.ManyToManyField(Person) + authors = models.ManyToManyField(Person, through="BookPerson") class Meta: ordering = ("name",) @@ -124,6 +143,15 @@ def __str__(self): return "%s by %s" % (self.name, authors) if authors else self.name +class BookPerson(models.Model): + book = models.ForeignKey(Book, on_delete=models.CASCADE) + person = models.ForeignKey(Person, on_delete=models.CASCADE) + + class Meta: + unique_together = (('book', 'person'),) + db_table = "fixtures_book_person" + + class PrimaryKeyUUIDModel(models.Model): id = models.UUIDField(primary_key=True, default=uuid.uuid4) @@ -139,10 +167,11 @@ class NaturalKeyThing(models.Model): "NaturalKeyThing", on_delete=models.CASCADE, null=True ) other_things = models.ManyToManyField( - "NaturalKeyThing", related_name="thing_m2m_set" - ) + "NaturalKeyThing", related_name="thing_m2m_set", through="NaturalKeyThingNaturalKeyThing") objects = NaturalKeyManager() + storage = ModelStorageManager(table_storage_type="REFERENCE") + def natural_key(self): return (self.key,) @@ -151,11 +180,22 @@ def __str__(self): return self.key +class NaturalKeyThingNaturalKeyThing(models.Model): + from_naturalkeything = models.ForeignKey(NaturalKeyThing, on_delete=models.CASCADE, related_name="from_naturalkeything") + to_naturalkeything = models.ForeignKey(NaturalKeyThing, on_delete=models.CASCADE, related_name="to_naturalkeything") + + class Meta: + unique_together = (('from_naturalkeything', 'to_naturalkeything'),) + db_table = "fixtures_naturalkeything_naturalkeything" + + class CircularA(models.Model): key = models.CharField(max_length=3, unique=True) obj = models.ForeignKey("CircularB", models.SET_NULL, null=True) objects = NaturalKeyManager() + storage = ModelStorageManager(table_storage_type="REFERENCE") + def natural_key(self): return (self.key,) @@ -166,6 +206,8 @@ class CircularB(models.Model): obj = models.ForeignKey("CircularA", models.SET_NULL, null=True) objects = NaturalKeyManager() + storage = ModelStorageManager(table_storage_type="REFERENCE") + def natural_key(self): return (self.key,)