Skip to content

Commit

Permalink
Feature/package versioning (#57)
Browse files Browse the repository at this point in the history
* models for version creation and storage

* working PackageVersion models with basic tests

* More testing, TODO: More granular versioning

* TODO: How to navigate different versions

* PV now ID-ed with ForeignKey, added summary field for PVs

* PR comment edits

* Delete 0001_initial.py

* Delete 0002_auto_20180304_0020.py

* Delete 0003_package_data.py

* Delete 0004_auto_20180509_0218.py

* Delete 0005_auto_20180509_0608.py

* Delete 0006_auto_20180516_0325.py

* Delete 0007_auto_20180516_0328.py

* Delete 0008_packageversion_version_description.py

* Delete 0001_squashed_0009_auto_20180517_0135.py

* Add files via upload

* new migration

* unbroke migrations

* fix migrations

* fixed creator foreignKey, updated tests

* Delete 0004_auto_20180517_1807.py

* fixed latest_version fKey to point to PV instance

* Add files via upload

* new migration

* fix migrations

* Delete 0004_auto_20180517_1807.py

* 'big-branch-update'

* 'gitignore-bundles'

* 'ignore-bundles'

* remove assets

* remove packages folder
  • Loading branch information
kaileymonn authored and hongee committed Nov 21, 2018
1 parent 27fa289 commit a2523d6
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 10 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ node_modules/
webpack-stats.json

kerckhoff/assets/bundles/**/*
assets/bundles/*

# General
*.DS_Store
Expand Down
14 changes: 14 additions & 0 deletions kerckhoff/packages/migrations/0006_merge_20181003_0252.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 2.0.2 on 2018-10-03 02:52

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('packages', '0005_auto_20180523_0211'),
('packages', '0005_auto_20180530_0148'),
]

operations = [
]
14 changes: 14 additions & 0 deletions kerckhoff/packages/migrations/0008_merge_20181013_0514.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Generated by Django 2.1 on 2018-10-13 05:14

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('packages', '0006_merge_20181003_0252'),
('packages', '0007_auto_20181012_0142'),
]

operations = [
]
11 changes: 6 additions & 5 deletions kerckhoff/packages/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ def content_type(self):
else:
return self._content_type

# For versioning feature, accepts string arguments name(of creater) and change_summary
# For versioning feature, accepts string arguments name(of creator) and change_summary
def create_version(self, user, change_summary):
pv = PackageVersion(package=self, article_data=self.cached_article_preview, data=self.data, creator=user, version_description=change_summary)
pv.save()
Expand Down Expand Up @@ -155,14 +155,11 @@ def setup_and_save(self, user, pset_slug):

def push_to_live(self):
res = requests.post(settings.LIVE_PUSH_SERVER + "/update", json={'id': self.package_set.slug + '/' + self.slug})

# Versioning
# self.create_version()

return res.ok

# TODO - put this in a workqueue
def fetch_from_gdrive(self, user):
# TODO Actually use this manual locking lol
self.processing = True
self.save()
try:
Expand All @@ -176,6 +173,10 @@ def fetch_from_gdrive(self, user):
transfer_to_s3(google, self)
self.cached_article_preview = rewrite_image_url(self)
self.last_fetched_date = timezone.now()
# Create new PV instance
# TODO Once frontend is done, query for proper change_summary. Default is last_fetched_date
self.create_version(user, "New PackageVersion created on {0}".format(self.last_fetched_date))

except Exception as e:
raise e
finally:
Expand Down
13 changes: 8 additions & 5 deletions kerckhoff/packages/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,10 @@ def test_PackageVersion_creation(self):
packageA.create_version(testUser, "This version uses Hong Yi")
myPV = PackageVersion.objects.get(package=packageA)

# TODO: individual fields don't really need to be tested - good to keep things shorter
self.assertEqual(myPV.article_data, "Hong Yi")
self.assertEqual(myPV.version_description, "This version uses Hong Yi")
self.assertEqual(myPV.creator.get_username(), "kimjongun")
# Check if PV database is properly updated with new PV object instance
self.assertEqual(myPV.version_description, "This version uses Hong Yi")
self.assertEqual(packageA.latest_version, myPV)


# Check handling of multiple PackageVersions
packageA.cached_article_preview = "HONG YEET"
packageA.create_version(testUser, "This version uses HONG YEET") # Now we should have 2 different versions of packageA
Expand All @@ -35,4 +32,10 @@ def test_PackageVersion_creation(self):
# Check if able to retrieve publish_date of latest PackageVersion
latestPV = packageA.latest_version
self.assertEqual(latestPV.article_data, "HONG YEET")

packageDB = Package.objects
packageSetDB = PackageSet.objects
packageVersionDB = PackageVersion.objects
# import code
# code.interact(local=locals())

33 changes: 33 additions & 0 deletions kerckhoff/pages/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,36 @@
from django.contrib.auth.models import User
from django.test import TestCase
from .models import PackageVersion, Package, PackageSet

# Create your tests here.
class PackageVersionTestCase(TestCase):
def setUp(self):
PackageSet.objects.create(slug="TestSet")
Package.objects.create(slug="a", cached_article_preview="Hong Yi", publish_date="2018-5-8", package_set_id="TestSet")

def test_PackageVersion_creation(self):
# Check if new PackageVersion is added to database and latest_version of respective Package is updated
testUser = User(username='kimjongun', password='katyperry')
testUser.save()
packageA = Package.objects.get(slug="a")
packageA.create_version(testUser, "This version uses Hong Yi")
myPV = PackageVersion.objects.get(package=packageA)
self.assertEqual(myPV.article_data, "Hong Yi")
self.assertEqual(myPV.version_description, "This version uses Hong Yi")
self.assertEqual(myPV.creator.get_username(), "kimjongun")
self.assertEqual(packageA.latest_version, myPV)


# Check handling of multiple PackageVersions
packageA.cached_article_preview = "HONG YEET"
packageA.create_version(testUser, "This version uses HONG YEET") # Now we should have 2 different versions of packageA
myPV = PackageVersion.objects.last()
self.assertEqual(len(PackageVersion.objects.filter(package=packageA).all()), 2)
self.assertEqual(myPV.article_data, "HONG YEET")
self.assertEqual(myPV.version_description, "This version uses HONG YEET")
self.assertEqual(myPV.creator.get_username(), "kimjongun")

# Check if able to retrieve publish_date of latest PackageVersion
latestPV = packageA.latest_version
self.assertEqual(latestPV.article_data, "HONG YEET")

0 comments on commit a2523d6

Please sign in to comment.