2021-06-21 13:05:33 -04:00
|
|
|
# Copyright 2021 (c) Anna Schumaker.
|
2021-06-21 13:19:42 -04:00
|
|
|
from . import publisher
|
2021-06-21 13:05:33 -04:00
|
|
|
from . import tagstore
|
2021-06-21 13:23:52 -04:00
|
|
|
import threading
|
2021-06-21 13:05:33 -04:00
|
|
|
import unittest
|
|
|
|
|
2021-06-23 14:40:19 -04:00
|
|
|
class FakeTrack:
|
|
|
|
def __init__(self, trackid):
|
|
|
|
self.trackid = trackid
|
|
|
|
|
2021-06-21 13:05:33 -04:00
|
|
|
class TestTagStore(unittest.TestCase):
|
2021-06-21 13:19:42 -04:00
|
|
|
def setUp(self):
|
|
|
|
self.added = None
|
|
|
|
self.removed = None
|
|
|
|
|
|
|
|
def on_store_added(self, tag):
|
|
|
|
self.added = tag
|
|
|
|
|
|
|
|
def on_store_removed(self, tag):
|
|
|
|
self.removed = tag
|
|
|
|
|
2021-06-21 13:05:33 -04:00
|
|
|
def test_tag_store(self):
|
|
|
|
store = tagstore.TagStore()
|
|
|
|
self.assertEqual(store.store, { })
|
2021-06-21 13:23:52 -04:00
|
|
|
self.assertIsInstance(store.lock, type(threading.Lock()))
|
2021-06-21 13:19:42 -04:00
|
|
|
self.assertIsInstance(store.Added, publisher.Publisher)
|
|
|
|
self.assertIsInstance(store.Removed, publisher.Publisher)
|
2021-06-21 13:05:33 -04:00
|
|
|
|
|
|
|
def test_tag_store_add_remove(self):
|
|
|
|
store = tagstore.TagStore()
|
2021-06-21 13:19:42 -04:00
|
|
|
store.Added.register(self.on_store_added)
|
|
|
|
store.Removed.register(self.on_store_removed)
|
|
|
|
|
2021-06-21 13:05:33 -04:00
|
|
|
tag = store.add("test", 1)
|
2021-06-21 13:19:42 -04:00
|
|
|
self.assertEqual(self.added, tag)
|
2021-06-21 13:05:33 -04:00
|
|
|
self.assertEqual(tag.tracks, [ 1 ])
|
|
|
|
|
2021-06-21 13:19:42 -04:00
|
|
|
self.added = None
|
2021-06-21 13:05:33 -04:00
|
|
|
self.assertEqual(store.add("test ", 2), tag)
|
|
|
|
self.assertEqual(tag.tracks, [ 1, 2 ])
|
2021-06-21 13:19:42 -04:00
|
|
|
self.assertIsNone(self.added)
|
2021-06-21 13:05:33 -04:00
|
|
|
|
|
|
|
store.remove(tag, 1)
|
|
|
|
self.assertEqual(tag.tracks, [ 2 ])
|
|
|
|
self.assertIn("test", store.store.keys())
|
2021-06-21 13:19:42 -04:00
|
|
|
self.assertIsNone(self.removed)
|
2021-06-21 13:05:33 -04:00
|
|
|
|
|
|
|
store.remove(tag, 2)
|
|
|
|
self.assertEqual(tag.tracks, [ ])
|
|
|
|
self.assertNotIn("test", store.store.keys())
|
2021-06-21 13:19:42 -04:00
|
|
|
self.assertEqual(self.removed, tag)
|
2021-06-24 15:16:56 -04:00
|
|
|
|
|
|
|
def test_tag_store_add_remove_none(self):
|
|
|
|
store = tagstore.TagStore()
|
|
|
|
tag = store.add("test")
|
|
|
|
self.assertEqual(tag.tracks, [ ])
|
|
|
|
|
|
|
|
tag.add_track(1)
|
|
|
|
tag.add_track(2)
|
|
|
|
|
|
|
|
store.remove(tag)
|
|
|
|
self.assertNotIn("test", store.store.keys())
|
2021-06-21 13:28:30 -04:00
|
|
|
|
|
|
|
def test_tag_store_reset(self):
|
|
|
|
store = tagstore.TagStore()
|
|
|
|
tag = store.add("test", 1)
|
|
|
|
store.Added.register(self.on_store_added)
|
|
|
|
store.Removed.register(self.on_store_removed)
|
|
|
|
|
|
|
|
store.reset()
|
|
|
|
self.assertNotIn(tag.name, store.store.keys())
|
|
|
|
self.assertEqual(store.Added.subscribers, set())
|
|
|
|
self.assertEqual(store.Removed.subscribers, set())
|
2021-06-21 14:11:12 -04:00
|
|
|
|
|
|
|
def test_tag_store_state(self):
|
|
|
|
store = tagstore.TagStore()
|
2021-06-23 14:40:19 -04:00
|
|
|
track = FakeTrack(1)
|
2021-06-21 14:11:12 -04:00
|
|
|
tag = store.add("test", 1)
|
|
|
|
|
|
|
|
state = store.__getstate__()
|
|
|
|
self.assertEqual(set(state.keys()), set([ "store" ]))
|
|
|
|
|
|
|
|
store.__dict__.clear()
|
|
|
|
store.__setstate__(state)
|
|
|
|
self.assertEqual(store.store, { "test" : tag })
|
|
|
|
self.assertIsInstance(store.lock, type(threading.Lock()))
|
|
|
|
self.assertIsInstance(store.Added, publisher.Publisher)
|
|
|
|
self.assertIsInstance(store.Removed, publisher.Publisher)
|
2021-06-23 14:40:19 -04:00
|
|
|
|
|
|
|
self.assertEqual(store.init_track("test", track), tag)
|
|
|
|
self.assertEqual(tag.tracks, [ track ])
|