Browse Source

Fix mang command

David Burke 5 years ago
parent
commit
b28dba8dd8

+ 11 - 4
event_store/test_data/event_generator.py

@@ -1,18 +1,25 @@
+import copy
 import uuid
 import random
+from django.utils import timezone
 from . import django_error_factory
 from .csp import mdn_sample_csp
 
 
 def make_event_unique(event):
-    """ Assign event a random new event_id """
-    event["event_id"] = uuid.uuid4().hex
-    return event
+    """ Assign event a random new event_id and current timestamp """
+    new_event = copy.deepcopy(event)
+    new_event["event_id"] = uuid.uuid4().hex
+    new_event["timestamp"] = timezone.now().isoformat()
+    return new_event
 
 
 def generate_random_event():
     """ Return a random event from library of samples with unique event id """
+
     events = django_error_factory.all_django_events
     events.append(mdn_sample_csp)
     event = random.choice(events)
-    return make_event_unique(event)
+    result = make_event_unique(event)
+
+    return result

+ 27 - 13
issues/management/commands/make_sample_issues.py

@@ -11,32 +11,46 @@ class Command(BaseCommand):
     help = "Create sample issues and events for dev and demonstration purposes"
 
     def add_arguments(self, parser):
-        parser.add_argument("quantity", nargs="+", type=int)
+        parser.add_argument("quantity", nargs="?", type=int)
         parser.add_argument(
-            "--include_real", action="store_true", help="Include real sample events",
+            "--only-real", action="store_true", help="Only include real sample events",
         )
+        parser.add_argument(
+            "--only-fake",
+            action="store_true",
+            help="Only include faked generated events",
+        )
+
+    def generate_real_event(self, project):
+        """ Generate an event based on real sample data """
+        data = event_generator.generate_random_event()
+        serializer = EventStoreAPIView().get_serializer_class(data)(data=data)
+        serializer.is_valid()
+        serializer.create(project, serializer.data)
 
     def handle(self, *args, **options):
         project = Project.objects.first()
         if not project:
             project = baker.make("projects.Project")
-        quantity = options["quantity"][0]
+        if options["quantity"] is None:
+            options["quantity"] = 1
+        quantity = options["quantity"]
 
-        if options["include_real"]:
+        only_real = options["only_real"]
+        only_fake = options["only_fake"]
+
+        if only_real:
+            for _ in range(quantity):
+                self.generate_real_event(project)
+        elif only_fake:
+            baker.make("issues.Event", issue__project=project, _quantity=quantity)
+        else:
             for _ in range(quantity):
                 if random.choice([0, 1]):
                     baker.make("issues.Event", issue__project=project)
                 else:
-                    data = event_generator.generate_random_event()
-                    serializer = EventStoreAPIView().get_serializer_class(data)(
-                        data=data
-                    )
-                    serializer.is_valid()
-                    serializer.create(project, serializer.data)
-        else:
-            baker.make("issues.Event", issue__project=project, _quantity=quantity)
+                    self.generate_real_event(project)
 
         self.stdout.write(
             self.style.SUCCESS('Successfully created "%s" events' % quantity)
         )
-

+ 29 - 0
issues/tests/test_commands.py

@@ -0,0 +1,29 @@
+import random
+from django.core import management
+from django.test import TestCase
+from issues.models import Event
+
+
+class CommandsTestCase(TestCase):
+    def setUp(self):
+        random.seed(32423423433)
+
+    def test_make_sample_issues(self):
+        """ Default is one random event """
+        management.call_command("make_sample_issues")
+        self.assertEqual(Event.objects.all().count(), 1)
+
+    def test_make_sample_issues_multiple(self):
+        """ Default is one random event """
+        management.call_command("make_sample_issues", quantity=10)
+        self.assertEqual(Event.objects.all().count(), 10)
+
+    def test_make_sample_issues_real(self):
+        """ Default is one random event """
+        management.call_command("make_sample_issues", only_real=True, quantity=2)
+        self.assertEqual(Event.objects.all().count(), 2)
+
+    def test_make_sample_issues_fake(self):
+        """ Default is one random event """
+        management.call_command("make_sample_issues", only_fake=True)
+        self.assertEqual(Event.objects.all().count(), 1)