예제 #1
0
 def test_update_mix_track_and_track_ext(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 132, self.db_path)  # instantiate mix 132
     # before edit:
     db_get_bef = self.mix.get_one_mix_track(4)  # get a track
     self.assertEqual(len(db_get_bef),
                      13)  # select should return 13 columns
     self.assertEqual(
         db_get_bef['d_track_name'],
         'The Crane (Inland & Function Rmx)')  # we won't/can't edit this
     self.assertEqual(db_get_bef['bpm'], 120)  # will be changed
     self.assertEqual(db_get_bef['key'], "Am")  # will be changed
     # do the edit
     track_details = db_get_bef
     edit_answers = {'bpm': 130, 'key': 'Fm'}
     db_ret_upd = self.mix.update_mix_track_and_track_ext(
         track_details, edit_answers)
     self.assertEqual(db_ret_upd, 1)  # was a row updated?
     # after edit:
     db_get_aft = self.mix.get_one_mix_track(4)  # get the updated track
     self.assertEqual(len(db_get_aft),
                      13)  # select should return 13 columns
     self.assertEqual(
         db_get_bef['d_track_name'],
         'The Crane (Inland & Function Rmx)')  # we didn't edit this
     self.assertEqual(db_get_aft['bpm'], 130)  # we just changed this
     self.assertEqual(db_get_aft['key'], "Fm")  # we just changed this
     print("{} - {} - END".format(self.clname, name))
예제 #2
0
 def test_get_full_mix_verbose(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 133, self.db_path)
     db_return = self.mix.get_full_mix(
         verbose=True)  # verbose select - all fields
     self.assertEqual(len(db_return), 7)  # mix 133 contains 7 tracks
     # track 1
     self.assertEqual(db_return[0]["track_pos"], 1)
     self.assertEqual(db_return[0]["discogs_title"], "Material Love")
     self.assertEqual(db_return[0]["d_artist"], "Märtini Brös.")
     self.assertEqual(db_return[0]["d_track_name"], "Material Love")
     self.assertEqual(db_return[0]["d_track_no"], "A1")
     self.assertEqual(db_return[0]["key"], "Am")
     self.assertEqual(db_return[0]["bpm"], 125)
     self.assertEqual(db_return[0]["key_notes"], "test key note A1")
     self.assertEqual(db_return[0]["trans_rating"], "+")
     self.assertEqual(db_return[0]["trans_notes"], "test trans 1")
     self.assertEqual(db_return[0]["notes"], "test track note")
     # track 4
     self.assertEqual(db_return[3]["track_pos"], 4)
     self.assertEqual(db_return[3]["discogs_title"], "The Crane")
     self.assertEqual(db_return[3]["d_track_name"],
                      "The Crane (Inland & Function Rmx)")
     self.assertEqual(db_return[3]["d_track_no"], "AA")
     self.assertEqual(db_return[3]["key"], "Am")
     self.assertEqual(db_return[3]["bpm"], 120)
     self.assertEqual(db_return[3]["key_notes"], None)
     self.assertEqual(db_return[3]["trans_rating"], "")
     self.assertEqual(db_return[3]["trans_notes"], "")
     self.assertEqual(db_return[3]["notes"], None)
     print("{} - {} - END".format(self.clname, name))
예제 #3
0
 def test_non_existent(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     # instantiate the Mix model class (empty, mix 123 = non-existent)
     self.mix = Mix(False, 123, self.db_path)
     self.assertFalse(self.mix.id_existing)
     print("{} - {} - END".format(self.clname, name))
예제 #4
0
 def test_reorder_tracks_squeeze_in(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 130,
                    self.db_path)  # mix 130 has contains 6 tracks
     # get tracks to shift
     tracks_to_shift = self.mix.get_tracks_from_position(
         3)  # track 3 is Material Love
     # add new track
     rowcount = self.mix.add_track(8620643, "A",
                                   track_pos=3)  # add "The Crane"
     self.assertEqual(rowcount, 1)  # 1 row was added?
     # now shift previously found tracks, shifting starts at pos 3
     db_ret_reord = self.mix.reorder_tracks_squeeze_in(3, tracks_to_shift)
     self.assertEqual(db_ret_reord, 1)
     db_get_crane = self.mix.get_one_mix_track(
         3)  # get the squeezed in track
     self.assertEqual(len(db_get_crane),
                      13)  # select should return 13 columns
     self.assertEqual(db_get_crane['d_track_name'],
                      'The Crane')  # should be The Crane
     db_get_cab = self.mix.get_one_mix_track(4)  # get track after that
     self.assertEqual(len(db_get_cab),
                      13)  # select should return 13 columns
     self.assertEqual(
         db_get_cab['d_track_name'],
         'Material Love (Cab Drivers Remix)')  # should be cab driver remix
     print("{} - {} - END".format(self.clname, name))
예제 #5
0
 def test_get_mix_id_number(
         self):  # trying to get id from name, but it's an ID
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 0, self.db_path)  # initiate an empty mix
     db_return = self.mix._get_mix_id(125)
     self.assertEqual(db_return, 125)  # should be 125, it's not a name
     print("{} - {} - END".format(self.clname, name))
예제 #6
0
 def test_get_mix_id_non_existent(
         self):  # trying to get id from name, but it's unknown
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 0, self.db_path)  # initiate an empty mix
     db_return = self.mix._get_mix_id("unknown mix name")
     self.assertEqual(db_return,
                      None)  # should be None, it's not a known mix name
     print("{} - {} - END".format(self.clname, name))
예제 #7
0
 def test_get_last_track(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 125, self.db_path)
     db_return = self.mix.get_last_track()
     self.assertEqual(len(db_return), 1)
     # self.assertEqual(db_return["track_pos"], 2)  # no named cols in this case?
     self.assertEqual(db_return[0], 2)  # maybe we use like this somewhere
     print("{} - {} - END".format(self.clname, name))
예제 #8
0
 def test_get_mix_id(self):  # trying to get id from name
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 0, self.db_path)  # initiate an empty mix
     db_return = self.mix._get_mix_id(
         "test 125")  # real name in db much longer (%?%)
     self.assertEqual(len(db_return), 1)  # should be 1 column
     self.assertEqual(db_return["mix_id"], 125)  # should be ID 125
     print("{} - {} - END".format(self.clname, name))
예제 #9
0
 def test_get_tracks_from_position(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 131, self.db_path)
     db_return = self.mix.get_tracks_from_position(4)
     self.assertEqual(len(db_return), 2)  # should be 2 rows/tracks
     self.assertEqual(db_return[0]['track_pos'],
                      4)  # first row should be pos 4
     self.assertEqual(db_return[1]['track_pos'],
                      5)  # second row should be pos 5
     print("{} - {} - END".format(self.clname, name))
예제 #10
0
 def test_delete_track(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 128, self.db_path)
     db_ret_del = self.mix.delete_track(3)
     self.assertEqual(db_ret_del, 1)
     db_return = self.mix.get_one_mix_track(
         3)  # get the track we just deleted
     self.assertEqual(db_return,
                      None)  # select should return nothing aka None
     print("{} - {} - END".format(self.clname, name))
예제 #11
0
 def test_delete(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 124, self.db_path)
     db_return = self.mix.delete()
     self.assertEqual(db_return, 1)
     self.assertFalse(self.mix.id_existing)
     self.assertFalse(self.mix.name_existing)
     # self.mix.name is kept for user help output
     self.assertFalse(self.mix.venue)
     self.assertFalse(self.mix.played)
     print("{} - {} - END".format(self.clname, name))
예제 #12
0
 def test_create(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 123, self.db_path)
     db_return = self.mix.create("2020-01-01", "test venue", "test mix 1")
     self.assertEqual(db_return, 1)
     self.assertTrue(self.mix.id_existing)
     self.assertTrue(self.mix.name_existing)
     self.assertEqual(self.mix.name, "test mix 1")
     self.assertEqual(self.mix.venue, "test venue")
     self.assertEqual(self.mix.played, "2020-01-01")
     print("{} - {} - END".format(self.clname, name))
예제 #13
0
 def test_get_mix_info(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 126, self.db_path)
     db_return = self.mix.get_mix_info()
     self.assertEqual(len(db_return), 6)
     self.assertTrue(self.mix.id_existing)
     self.assertTrue(self.mix.name_existing)
     self.assertEqual(self.mix.name, "test 126 mix_info")
     self.assertEqual(self.mix.venue, "test venue")
     self.assertEqual(self.mix.played, "2020-01-01")
     print("{} - {} - END".format(self.clname, name))
예제 #14
0
 def test_get_mix_info_error(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 123, self.db_path)  # mix 123 is not existing
     db_return = self.mix.get_mix_info(
     )  # actually this was called in init already
     self.assertEqual(db_return, None)  # _select returns NoneType
     self.assertFalse(self.mix.id_existing)
     self.assertFalse(self.mix.name_existing)
     self.assertEqual(self.mix.name, False)
     self.assertEqual(self.mix.venue, False)
     self.assertEqual(self.mix.played, False)
     print("{} - {} - END".format(self.clname, name))
예제 #15
0
 def test_get_all_tracks_in_mixes(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 0, self.db_path)
     db_return = self.mix.get_all_tracks_in_mixes()
     # self.assertEqual(len(db_return), 4)  # this will vary if we add tracks, screw it
     self.assertEqual(db_return[0]["mix_id"], 125)
     self.assertEqual(db_return[0]["d_release_id"], 123456)
     self.assertEqual(db_return[0]["d_track_no"], "A1")
     self.assertEqual(db_return[3]["mix_id"], 126)
     self.assertEqual(db_return[3]["d_release_id"], 123456)
     self.assertEqual(db_return[3]["d_track_no"], "B2")
     print("{} - {} - END".format(self.clname, name))
예제 #16
0
 def test_get_tracks_of_one_mix(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 125, self.db_path)
     db_return = self.mix.get_tracks_of_one_mix()
     self.assertEqual(len(db_return), 2)
     self.assertEqual(db_return[0]["mix_id"], 125)
     self.assertEqual(db_return[0]["d_release_id"], 123456)
     self.assertEqual(db_return[0]["d_track_no"], "A1")
     self.assertEqual(db_return[1]["mix_id"], 125)
     self.assertEqual(db_return[1]["d_release_id"], 123456)
     self.assertEqual(db_return[1]["d_track_no"], "B2")
     print("{} - {} - END".format(self.clname, name))
예제 #17
0
 def test_reorder_tracks(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 129,
                    self.db_path)  # mix 129 is missing track_pos 5
     db_ret_reord = self.mix.reorder_tracks(4)  # reorder starts at pos 4
     self.assertEqual(db_ret_reord, 1)
     db_get_ret = self.mix.get_one_mix_track(
         5)  # get the track_pos that was the gap
     self.assertEqual(len(db_get_ret),
                      13)  # select should return 13 columns
     self.assertEqual(db_get_ret['d_track_name'],
                      'Material Love (Cab Drivers Remix)'
                      )  # pos 5 should be this track now
     print("{} - {} - END".format(self.clname, name))
예제 #18
0
 def test_shift_track_down(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 135, self.db_path)
     shift_return = self.mix.shift_track(4, 'down')
     self.assertTrue(shift_return)  # should be True
     get_3_return = self.mix.get_one_mix_track(3)  # should stay the same
     get_4_return = self.mix.get_one_mix_track(4)
     get_5_return = self.mix.get_one_mix_track(5)
     self.assertEqual(get_3_return["discogs_title"], 'Material Love')
     self.assertEqual(get_3_return["d_track_no"], 'B1')
     self.assertEqual(get_4_return["discogs_title"], 'Material Love')
     self.assertEqual(get_4_return["d_track_no"], 'B1')
     self.assertEqual(get_5_return["discogs_title"], 'The Crane')
     self.assertEqual(get_5_return["d_track_no"], 'AA')
     print("{} - {} - END".format(self.clname, name))
예제 #19
0
 def test_add_track(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 127, self.db_path)
     db_ret_add = self.mix.add_track("123456", "B2", 5, 'üüü', '@@@')
     self.assertEqual(db_ret_add, 1)
     db_return = self.mix.get_one_mix_track(5)  # get track #2
     self.assertEqual(len(db_return), 13)  # select returns 13 cols
     self.assertEqual(db_return["track_pos"], 5)
     self.assertEqual(db_return["discogs_title"], "Material Love")
     self.assertEqual(db_return["d_track_name"], "Hedup!")
     self.assertEqual(db_return["d_track_no"], "B2")
     self.assertEqual(db_return["trans_rating"], "üüü")
     self.assertEqual(db_return["trans_notes"], "@@@")
     self.assertEqual(db_return["key"], "C")
     self.assertEqual(db_return["bpm"], 130)
     print("{} - {} - END".format(self.clname, name))
예제 #20
0
 def test_get_one_mix_track(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 125, self.db_path)
     db_return = self.mix.get_one_mix_track(2)  # get track #2
     self.assertEqual(len(db_return), 13)  # select returns 13 cols
     self.assertEqual(db_return["track_pos"], 2)
     self.assertEqual(db_return["discogs_title"], "Material Love")
     self.assertEqual(db_return["d_track_name"], "Hedup!")
     self.assertEqual(db_return["d_track_no"], "B2")
     self.assertEqual(db_return["trans_rating"], "++++")
     self.assertEqual(db_return["trans_notes"], "test trans 4")
     self.assertEqual(db_return["key"], "C")
     self.assertEqual(db_return["key_notes"], "test key note B2")
     self.assertEqual(db_return["bpm"], 130)
     self.assertEqual(db_return["notes"], "test note B2")
     # how would I test this? db_return["mix_track_id"], "")
     self.assertEqual(db_return["d_release_id"], 123456)
     print("{} - {} - END".format(self.clname, name))
예제 #21
0
 def test_get_full_mix(self):
     name = inspect.currentframe().f_code.co_name
     print("\n{} - {} - BEGIN".format(self.clname, name))
     self.mix = Mix(False, 133, self.db_path)
     db_return = self.mix.get_full_mix(
     )  # non-verbose select - not all fields
     self.assertEqual(len(db_return), 7)  # mix 133 contains 7 tracks
     # track 1
     self.assertEqual(db_return[0]["track_pos"], 1)
     self.assertEqual(db_return[0]["discogs_title"], "Material Love")
     self.assertEqual(db_return[0]["d_track_no"], "A1")
     self.assertEqual(db_return[0]["trans_rating"], "+")
     self.assertEqual(db_return[0]["key"], "Am")
     self.assertEqual(db_return[0]["bpm"], 125)
     # track 4
     self.assertEqual(db_return[3]["track_pos"], 4)
     self.assertEqual(db_return[3]["discogs_title"], "The Crane")
     self.assertEqual(db_return[3]["d_track_no"], "AA")
     self.assertEqual(db_return[3]["trans_rating"], "")
     self.assertEqual(db_return[3]["key"], "Am")
     self.assertEqual(db_return[3]["bpm"], 120)
     print("{} - {} - END".format(self.clname, name))
예제 #22
0
class TestMix(unittest.TestCase):
    @classmethod
    def setUpClass(self):
        # log.handlers[0].setLevel("INFO")  # handler 0 is the console handler
        # log.handlers[0].setLevel("DEBUG")  # handler 0 is the console handler
        discodos_tests = Path(os.path.dirname(os.path.abspath(__file__)))
        empty_db_path = discodos_tests / 'fixtures' / 'discobase_empty.db'
        self.db_path = discodos_tests / 'discobase.db'
        self.clname = self.__name__  # just handy a shortcut, used in test output
        print('TestMix.setUpClass: test-db: {}'.format(
            copy2(empty_db_path, self.db_path)))
        print("TestMix.setUpClass: done\n")

    def test_non_existent(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        # instantiate the Mix model class (empty, mix 123 = non-existent)
        self.mix = Mix(False, 123, self.db_path)
        self.assertFalse(self.mix.id_existing)
        print("{} - {} - END".format(self.clname, name))

    def test_create(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 123, self.db_path)
        db_return = self.mix.create("2020-01-01", "test venue", "test mix 1")
        self.assertEqual(db_return, 1)
        self.assertTrue(self.mix.id_existing)
        self.assertTrue(self.mix.name_existing)
        self.assertEqual(self.mix.name, "test mix 1")
        self.assertEqual(self.mix.venue, "test venue")
        self.assertEqual(self.mix.played, "2020-01-01")
        print("{} - {} - END".format(self.clname, name))

    def test_delete(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 124, self.db_path)
        db_return = self.mix.delete()
        self.assertEqual(db_return, 1)
        self.assertFalse(self.mix.id_existing)
        self.assertFalse(self.mix.name_existing)
        # self.mix.name is kept for user help output
        self.assertFalse(self.mix.venue)
        self.assertFalse(self.mix.played)
        print("{} - {} - END".format(self.clname, name))

    def test_get_one_mix_track(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 125, self.db_path)
        db_return = self.mix.get_one_mix_track(2)  # get track #2
        self.assertEqual(len(db_return), 13)  # select returns 13 cols
        self.assertEqual(db_return["track_pos"], 2)
        self.assertEqual(db_return["discogs_title"], "Material Love")
        self.assertEqual(db_return["d_track_name"], "Hedup!")
        self.assertEqual(db_return["d_track_no"], "B2")
        self.assertEqual(db_return["trans_rating"], "++++")
        self.assertEqual(db_return["trans_notes"], "test trans 4")
        self.assertEqual(db_return["key"], "C")
        self.assertEqual(db_return["key_notes"], "test key note B2")
        self.assertEqual(db_return["bpm"], 130)
        self.assertEqual(db_return["notes"], "test note B2")
        # how would I test this? db_return["mix_track_id"], "")
        self.assertEqual(db_return["d_release_id"], 123456)
        print("{} - {} - END".format(self.clname, name))

    def test_get_tracks_of_one_mix(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 125, self.db_path)
        db_return = self.mix.get_tracks_of_one_mix()
        self.assertEqual(len(db_return), 2)
        self.assertEqual(db_return[0]["mix_id"], 125)
        self.assertEqual(db_return[0]["d_release_id"], 123456)
        self.assertEqual(db_return[0]["d_track_no"], "A1")
        self.assertEqual(db_return[1]["mix_id"], 125)
        self.assertEqual(db_return[1]["d_release_id"], 123456)
        self.assertEqual(db_return[1]["d_track_no"], "B2")
        print("{} - {} - END".format(self.clname, name))

    def test_get_all_tracks_in_mixes(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 0, self.db_path)
        db_return = self.mix.get_all_tracks_in_mixes()
        # self.assertEqual(len(db_return), 4)  # this will vary if we add tracks, screw it
        self.assertEqual(db_return[0]["mix_id"], 125)
        self.assertEqual(db_return[0]["d_release_id"], 123456)
        self.assertEqual(db_return[0]["d_track_no"], "A1")
        self.assertEqual(db_return[3]["mix_id"], 126)
        self.assertEqual(db_return[3]["d_release_id"], 123456)
        self.assertEqual(db_return[3]["d_track_no"], "B2")
        print("{} - {} - END".format(self.clname, name))

    def test_get_mix_info(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 126, self.db_path)
        db_return = self.mix.get_mix_info()
        self.assertEqual(len(db_return), 6)
        self.assertTrue(self.mix.id_existing)
        self.assertTrue(self.mix.name_existing)
        self.assertEqual(self.mix.name, "test 126 mix_info")
        self.assertEqual(self.mix.venue, "test venue")
        self.assertEqual(self.mix.played, "2020-01-01")
        print("{} - {} - END".format(self.clname, name))

    def test_get_mix_info_error(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 123, self.db_path)  # mix 123 is not existing
        db_return = self.mix.get_mix_info(
        )  # actually this was called in init already
        self.assertEqual(db_return, None)  # _select returns NoneType
        self.assertFalse(self.mix.id_existing)
        self.assertFalse(self.mix.name_existing)
        self.assertEqual(self.mix.name, False)
        self.assertEqual(self.mix.venue, False)
        self.assertEqual(self.mix.played, False)
        print("{} - {} - END".format(self.clname, name))

    def test_get_last_track(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 125, self.db_path)
        db_return = self.mix.get_last_track()
        self.assertEqual(len(db_return), 1)
        # self.assertEqual(db_return["track_pos"], 2)  # no named cols in this case?
        self.assertEqual(db_return[0], 2)  # maybe we use like this somewhere
        print("{} - {} - END".format(self.clname, name))

    def test_add_track(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 127, self.db_path)
        db_ret_add = self.mix.add_track("123456", "B2", 5, 'üüü', '@@@')
        self.assertEqual(db_ret_add, 1)
        db_return = self.mix.get_one_mix_track(5)  # get track #2
        self.assertEqual(len(db_return), 13)  # select returns 13 cols
        self.assertEqual(db_return["track_pos"], 5)
        self.assertEqual(db_return["discogs_title"], "Material Love")
        self.assertEqual(db_return["d_track_name"], "Hedup!")
        self.assertEqual(db_return["d_track_no"], "B2")
        self.assertEqual(db_return["trans_rating"], "üüü")
        self.assertEqual(db_return["trans_notes"], "@@@")
        self.assertEqual(db_return["key"], "C")
        self.assertEqual(db_return["bpm"], 130)
        print("{} - {} - END".format(self.clname, name))

    def test_delete_track(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 128, self.db_path)
        db_ret_del = self.mix.delete_track(3)
        self.assertEqual(db_ret_del, 1)
        db_return = self.mix.get_one_mix_track(
            3)  # get the track we just deleted
        self.assertEqual(db_return,
                         None)  # select should return nothing aka None
        print("{} - {} - END".format(self.clname, name))

    def test_reorder_tracks(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 129,
                       self.db_path)  # mix 129 is missing track_pos 5
        db_ret_reord = self.mix.reorder_tracks(4)  # reorder starts at pos 4
        self.assertEqual(db_ret_reord, 1)
        db_get_ret = self.mix.get_one_mix_track(
            5)  # get the track_pos that was the gap
        self.assertEqual(len(db_get_ret),
                         13)  # select should return 13 columns
        self.assertEqual(db_get_ret['d_track_name'],
                         'Material Love (Cab Drivers Remix)'
                         )  # pos 5 should be this track now
        print("{} - {} - END".format(self.clname, name))

    def test_reorder_tracks_squeeze_in(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 130,
                       self.db_path)  # mix 130 has contains 6 tracks
        # get tracks to shift
        tracks_to_shift = self.mix.get_tracks_from_position(
            3)  # track 3 is Material Love
        # add new track
        rowcount = self.mix.add_track(8620643, "A",
                                      track_pos=3)  # add "The Crane"
        self.assertEqual(rowcount, 1)  # 1 row was added?
        # now shift previously found tracks, shifting starts at pos 3
        db_ret_reord = self.mix.reorder_tracks_squeeze_in(3, tracks_to_shift)
        self.assertEqual(db_ret_reord, 1)
        db_get_crane = self.mix.get_one_mix_track(
            3)  # get the squeezed in track
        self.assertEqual(len(db_get_crane),
                         13)  # select should return 13 columns
        self.assertEqual(db_get_crane['d_track_name'],
                         'The Crane')  # should be The Crane
        db_get_cab = self.mix.get_one_mix_track(4)  # get track after that
        self.assertEqual(len(db_get_cab),
                         13)  # select should return 13 columns
        self.assertEqual(
            db_get_cab['d_track_name'],
            'Material Love (Cab Drivers Remix)')  # should be cab driver remix
        print("{} - {} - END".format(self.clname, name))

    def test_get_tracks_from_position(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 131, self.db_path)
        db_return = self.mix.get_tracks_from_position(4)
        self.assertEqual(len(db_return), 2)  # should be 2 rows/tracks
        self.assertEqual(db_return[0]['track_pos'],
                         4)  # first row should be pos 4
        self.assertEqual(db_return[1]['track_pos'],
                         5)  # second row should be pos 5
        print("{} - {} - END".format(self.clname, name))

    def test_update_mix_track_and_track_ext(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 132, self.db_path)  # instantiate mix 132
        # before edit:
        db_get_bef = self.mix.get_one_mix_track(4)  # get a track
        self.assertEqual(len(db_get_bef),
                         13)  # select should return 13 columns
        self.assertEqual(
            db_get_bef['d_track_name'],
            'The Crane (Inland & Function Rmx)')  # we won't/can't edit this
        self.assertEqual(db_get_bef['bpm'], 120)  # will be changed
        self.assertEqual(db_get_bef['key'], "Am")  # will be changed
        # do the edit
        track_details = db_get_bef
        edit_answers = {'bpm': 130, 'key': 'Fm'}
        db_ret_upd = self.mix.update_mix_track_and_track_ext(
            track_details, edit_answers)
        self.assertEqual(db_ret_upd, 1)  # was a row updated?
        # after edit:
        db_get_aft = self.mix.get_one_mix_track(4)  # get the updated track
        self.assertEqual(len(db_get_aft),
                         13)  # select should return 13 columns
        self.assertEqual(
            db_get_bef['d_track_name'],
            'The Crane (Inland & Function Rmx)')  # we didn't edit this
        self.assertEqual(db_get_aft['bpm'], 130)  # we just changed this
        self.assertEqual(db_get_aft['key'], "Fm")  # we just changed this
        print("{} - {} - END".format(self.clname, name))

    def test_get_full_mix(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 133, self.db_path)
        db_return = self.mix.get_full_mix(
        )  # non-verbose select - not all fields
        self.assertEqual(len(db_return), 7)  # mix 133 contains 7 tracks
        # track 1
        self.assertEqual(db_return[0]["track_pos"], 1)
        self.assertEqual(db_return[0]["discogs_title"], "Material Love")
        self.assertEqual(db_return[0]["d_track_no"], "A1")
        self.assertEqual(db_return[0]["trans_rating"], "+")
        self.assertEqual(db_return[0]["key"], "Am")
        self.assertEqual(db_return[0]["bpm"], 125)
        # track 4
        self.assertEqual(db_return[3]["track_pos"], 4)
        self.assertEqual(db_return[3]["discogs_title"], "The Crane")
        self.assertEqual(db_return[3]["d_track_no"], "AA")
        self.assertEqual(db_return[3]["trans_rating"], "")
        self.assertEqual(db_return[3]["key"], "Am")
        self.assertEqual(db_return[3]["bpm"], 120)
        print("{} - {} - END".format(self.clname, name))

    def test_get_full_mix_verbose(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 133, self.db_path)
        db_return = self.mix.get_full_mix(
            verbose=True)  # verbose select - all fields
        self.assertEqual(len(db_return), 7)  # mix 133 contains 7 tracks
        # track 1
        self.assertEqual(db_return[0]["track_pos"], 1)
        self.assertEqual(db_return[0]["discogs_title"], "Material Love")
        self.assertEqual(db_return[0]["d_artist"], "Märtini Brös.")
        self.assertEqual(db_return[0]["d_track_name"], "Material Love")
        self.assertEqual(db_return[0]["d_track_no"], "A1")
        self.assertEqual(db_return[0]["key"], "Am")
        self.assertEqual(db_return[0]["bpm"], 125)
        self.assertEqual(db_return[0]["key_notes"], "test key note A1")
        self.assertEqual(db_return[0]["trans_rating"], "+")
        self.assertEqual(db_return[0]["trans_notes"], "test trans 1")
        self.assertEqual(db_return[0]["notes"], "test track note")
        # track 4
        self.assertEqual(db_return[3]["track_pos"], 4)
        self.assertEqual(db_return[3]["discogs_title"], "The Crane")
        self.assertEqual(db_return[3]["d_track_name"],
                         "The Crane (Inland & Function Rmx)")
        self.assertEqual(db_return[3]["d_track_no"], "AA")
        self.assertEqual(db_return[3]["key"], "Am")
        self.assertEqual(db_return[3]["bpm"], 120)
        self.assertEqual(db_return[3]["key_notes"], None)
        self.assertEqual(db_return[3]["trans_rating"], "")
        self.assertEqual(db_return[3]["trans_notes"], "")
        self.assertEqual(db_return[3]["notes"], None)
        print("{} - {} - END".format(self.clname, name))

    def test_get_mix_id_number(
            self):  # trying to get id from name, but it's an ID
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 0, self.db_path)  # initiate an empty mix
        db_return = self.mix._get_mix_id(125)
        self.assertEqual(db_return, 125)  # should be 125, it's not a name
        print("{} - {} - END".format(self.clname, name))

    def test_get_mix_id_non_existent(
            self):  # trying to get id from name, but it's unknown
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 0, self.db_path)  # initiate an empty mix
        db_return = self.mix._get_mix_id("unknown mix name")
        self.assertEqual(db_return,
                         None)  # should be None, it's not a known mix name
        print("{} - {} - END".format(self.clname, name))

    def test_get_mix_id(self):  # trying to get id from name
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 0, self.db_path)  # initiate an empty mix
        db_return = self.mix._get_mix_id(
            "test 125")  # real name in db much longer (%?%)
        self.assertEqual(len(db_return), 1)  # should be 1 column
        self.assertEqual(db_return["mix_id"], 125)  # should be ID 125
        print("{} - {} - END".format(self.clname, name))

    def test_shift_track_up(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 134, self.db_path)
        shift_return = self.mix.shift_track(4, 'up')
        self.assertTrue(shift_return)  # should be True
        get_3_return = self.mix.get_one_mix_track(3)
        get_4_return = self.mix.get_one_mix_track(4)
        get_5_return = self.mix.get_one_mix_track(5)  # should stay the same
        self.assertEqual(get_3_return["discogs_title"], 'The Crane')  # Release
        self.assertEqual(get_3_return["d_track_no"], 'AA')  # should be AA
        self.assertEqual(get_4_return["discogs_title"],
                         'Material Love')  # Release
        self.assertEqual(get_4_return["d_track_no"], 'B1')  # should be AA
        self.assertEqual(get_5_return["discogs_title"],
                         'Material Love')  # Release
        self.assertEqual(get_5_return["d_track_no"], 'B1')  # should be AA
        print("{} - {} - END".format(self.clname, name))

    def test_shift_track_down(self):
        name = inspect.currentframe().f_code.co_name
        print("\n{} - {} - BEGIN".format(self.clname, name))
        self.mix = Mix(False, 135, self.db_path)
        shift_return = self.mix.shift_track(4, 'down')
        self.assertTrue(shift_return)  # should be True
        get_3_return = self.mix.get_one_mix_track(3)  # should stay the same
        get_4_return = self.mix.get_one_mix_track(4)
        get_5_return = self.mix.get_one_mix_track(5)
        self.assertEqual(get_3_return["discogs_title"], 'Material Love')
        self.assertEqual(get_3_return["d_track_no"], 'B1')
        self.assertEqual(get_4_return["discogs_title"], 'Material Love')
        self.assertEqual(get_4_return["d_track_no"], 'B1')
        self.assertEqual(get_5_return["discogs_title"], 'The Crane')
        self.assertEqual(get_5_return["d_track_no"], 'AA')
        print("{} - {} - END".format(self.clname, name))

    @classmethod
    def tearDownClass(self):
        os.remove(self.db_path)
        print("\nTestMix.teardownClass: done")