Compare commits
2 commits
jedi/searc
...
testing
Author | SHA1 | Date | |
---|---|---|---|
d4ffa0228c | |||
61c4beda47 |
7 changed files with 69 additions and 126 deletions
|
@ -20,12 +20,9 @@ jobs:
|
|||
- name: Run django tests
|
||||
working-directory: core
|
||||
run: python3 manage.py test
|
||||
- name: Run django coverage
|
||||
working-directory: core
|
||||
run: coverage manage.py test
|
||||
|
||||
deploy:
|
||||
needs: [ test ]
|
||||
needs: [test]
|
||||
runs-on: docker
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.contrib import admin
|
||||
|
||||
from inventory.models import Item, Container, Event
|
||||
from inventory.models import Item, Container, ItemPlacement, Comment, Event
|
||||
|
||||
|
||||
class ItemAdmin(admin.ModelAdmin):
|
||||
|
@ -22,3 +22,17 @@ class EventAdmin(admin.ModelAdmin):
|
|||
|
||||
|
||||
admin.site.register(Event, EventAdmin)
|
||||
|
||||
|
||||
class ItemPlacementAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
admin.site.register(ItemPlacement, ItemPlacementAdmin)
|
||||
|
||||
|
||||
class CommentAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
admin.site.register(Comment, CommentAdmin)
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
# Generated by Django 4.2.7 on 2024-11-23 00:19
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('inventory', '0006_alter_event_table'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='item',
|
||||
name='container',
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ItemPlacement',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||
('container', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_history', to='inventory.container')),
|
||||
('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='container_history', to='inventory.item')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Comment',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('comment', models.TextField()),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||
('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='inventory.item')),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,52 @@
|
|||
# Generated by Django 4.2.7 on 2024-11-23 15:27
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
('inventory', '0006_alter_event_table'),
|
||||
]
|
||||
|
||||
def set_initial_container(apps, schema_editor):
|
||||
Item = apps.get_model('inventory', 'Item')
|
||||
for item in Item.objects.all():
|
||||
item.container_history.get_or_create(container=item.container_old)
|
||||
item.save()
|
||||
|
||||
operations = [
|
||||
migrations.RenameField(
|
||||
model_name='item',
|
||||
old_name='container',
|
||||
new_name='container_old',
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ItemPlacement',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||
('container',
|
||||
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='item_history',
|
||||
to='inventory.container')),
|
||||
('item',
|
||||
models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='container_history',
|
||||
to='inventory.item')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Comment',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('comment', models.TextField()),
|
||||
('timestamp', models.DateTimeField(auto_now_add=True)),
|
||||
('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments',
|
||||
to='inventory.item')),
|
||||
],
|
||||
),
|
||||
migrations.RunPython(set_initial_container),
|
||||
migrations.RemoveField(
|
||||
model_name='item',
|
||||
name='container_old',
|
||||
),
|
||||
]
|
|
@ -92,7 +92,7 @@ class Comment(models.Model):
|
|||
timestamp = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.issue_thread) + ' comment #' + str(self.id)
|
||||
return str(self.item) + ' comment #' + str(self.id)
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
|
|
|
@ -13,8 +13,6 @@ from base64 import b64encode
|
|||
|
||||
from tickets.models import IssueThread, ItemRelation
|
||||
|
||||
from base64 import b64encode
|
||||
|
||||
|
||||
class ItemTestCase(TestCase):
|
||||
|
||||
|
@ -327,74 +325,3 @@ class ItemSearchTestCase(TestCase):
|
|||
self.assertEqual(self.box.id, response.json()[1]['cid'])
|
||||
self.assertEqual(1, response.json()[1]['search_score'])
|
||||
|
||||
|
||||
|
||||
class ItemSearchTestCase(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.event = Event.objects.create(slug='EVENT', name='Event')
|
||||
self.box = Container.objects.create(name='BOX')
|
||||
self.user = ExtendedUser.objects.create_user('testuser', 'test', 'test')
|
||||
self.user.user_permissions.add(*Permission.objects.all())
|
||||
self.token = AuthToken.objects.create(user=self.user)
|
||||
self.client = Client(headers={'Authorization': 'Token ' + self.token[1]})
|
||||
self.item1 = Item.objects.create(container=self.box, event=self.event, description='abc def')
|
||||
self.item2 = Item.objects.create(container=self.box, event=self.event, description='def ghi')
|
||||
self.item3 = Item.objects.create(container=self.box, event=self.event, description='jkl mno pqr')
|
||||
self.item4 = Item.objects.create(container=self.box, event=self.event, description='stu vwx')
|
||||
|
||||
def test_search(self):
|
||||
search_query = b64encode(b'abc').decode('utf-8')
|
||||
response = self.client.get(f'/api/2/{self.event.slug}/items/{search_query}/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual(1, len(response.json()))
|
||||
self.assertEqual(self.item1.uid, response.json()[0]['uid'])
|
||||
self.assertEqual('abc def', response.json()[0]['description'])
|
||||
self.assertEqual('BOX', response.json()[0]['box'])
|
||||
self.assertEqual(self.box.cid, response.json()[0]['cid'])
|
||||
self.assertEqual(1, response.json()[0]['search_score'])
|
||||
|
||||
def test_search2(self):
|
||||
search_query = b64encode(b'def').decode('utf-8')
|
||||
response = self.client.get(f'/api/2/{self.event.slug}/items/{search_query}/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual(2, len(response.json()))
|
||||
self.assertEqual(self.item1.uid, response.json()[0]['uid'])
|
||||
self.assertEqual('abc def', response.json()[0]['description'])
|
||||
self.assertEqual('BOX', response.json()[0]['box'])
|
||||
self.assertEqual(self.box.cid, response.json()[0]['cid'])
|
||||
self.assertEqual(1, response.json()[0]['search_score'])
|
||||
self.assertEqual(self.item2.uid, response.json()[1]['uid'])
|
||||
self.assertEqual('def ghi', response.json()[1]['description'])
|
||||
self.assertEqual('BOX', response.json()[1]['box'])
|
||||
self.assertEqual(self.box.cid, response.json()[1]['cid'])
|
||||
self.assertEqual(1, response.json()[0]['search_score'])
|
||||
|
||||
def test_search3(self):
|
||||
search_query = b64encode(b'jkl').decode('utf-8')
|
||||
response = self.client.get(f'/api/2/{self.event.slug}/items/{search_query}/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual(1, len(response.json()))
|
||||
self.assertEqual(self.item3.uid, response.json()[0]['uid'])
|
||||
self.assertEqual('jkl mno pqr', response.json()[0]['description'])
|
||||
self.assertEqual('BOX', response.json()[0]['box'])
|
||||
self.assertEqual(self.box.cid, response.json()[0]['cid'])
|
||||
self.assertEqual(1, response.json()[0]['search_score'])
|
||||
|
||||
def test_search4(self):
|
||||
search_query = b64encode(b'abc def').decode('utf-8')
|
||||
response = self.client.get(f'/api/2/{self.event.slug}/items/{search_query}/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual(2, len(response.json()))
|
||||
self.assertEqual(self.item1.uid, response.json()[0]['uid'])
|
||||
self.assertEqual('abc def', response.json()[0]['description'])
|
||||
self.assertEqual('BOX', response.json()[0]['box'])
|
||||
self.assertEqual(self.box.cid, response.json()[0]['cid'])
|
||||
self.assertEqual(2, response.json()[0]['search_score'])
|
||||
self.assertEqual(self.item2.uid, response.json()[1]['uid'])
|
||||
self.assertEqual('def ghi', response.json()[1]['description'])
|
||||
self.assertEqual('BOX', response.json()[1]['box'])
|
||||
self.assertEqual(self.box.cid, response.json()[1]['cid'])
|
||||
self.assertEqual(1, response.json()[1]['search_score'])
|
||||
|
||||
|
|
|
@ -130,17 +130,6 @@ class IssueSerializer(BasicIssueSerializer):
|
|||
|
||||
|
||||
|
||||
class SearchResultSerializer(serializers.Serializer):
|
||||
search_score = serializers.IntegerField()
|
||||
item = IssueSerializer()
|
||||
|
||||
def to_representation(self, instance):
|
||||
return {**IssueSerializer(instance['item']).data, 'search_score': instance['search_score']}
|
||||
|
||||
class Meta:
|
||||
model = IssueThread
|
||||
|
||||
|
||||
class SearchResultSerializer(serializers.Serializer):
|
||||
search_score = serializers.IntegerField()
|
||||
item = IssueSerializer()
|
||||
|
|
Loading…
Reference in a new issue