def test_unzip(self):
     self.addFiles()
     for test_dir in self.test_dirs:
         upload_dir = os.path.join(P2B.UPLOAD_DIR, os.path.basename(test_dir)) + os.sep
         for i in range(len(self.zip_files[test_dir])):
             P2B.unzip(upload_dir, upload_dir + self.zip_files[test_dir][i])
             # Check that a new directory was made for the etd
             self.assertTrue(os.path.exists(upload_dir + self.etd_dirs[test_dir][i]))
             # Check that there are files present in the newly created directory
             self.assertTrue(glob.glob(P2B.UPLOAD_DIR + self.etd_dirs[test_dir][i] + "/*") is not None)
    def test_transform_files(self):
        self.addFiles()

        for test_dir in self.test_dirs:
            # TODO: This logic really shouldn't have to be in the tests.
            bname = os.path.basename(os.path.normpath(test_dir))
            if (not P2B.config.has_option('email', bname)) or (P2B.config.get('email', bname) == ''):
                print "No email confiugred for %s option in [email]" % bname
                print "Skipping this folder until one is configured."
                continue
            P2B.RESULT_EMAIL = P2B.config.get('email', bname)

            upload_dir = os.path.join(P2B.UPLOAD_DIR, os.path.basename(test_dir)) + os.sep

            # Unzip each zip file
            for zipf in self.zip_files[test_dir]:
                P2B.unzip(upload_dir, upload_dir + zipf)

            # Test each zip
            for zipf in self.zip_files[test_dir]:
                # If the correct output for a zip is not present we should skip it
                if not os.path.exists("./TestFiles/" + os.path.splitext(zipf)[0] + "_Output.xml"):
                    print "Missing correct output for %s. Skipping." % zipf
                    continue

                print "Testing %s..." % zipf
                etd_name = os.path.splitext(zipf)[0]
                P2B.transform_files(upload_dir + etd_name + '/')

                output_fname = etd_name + "_Output.xml"
                self.assertTrue(os.path.exists(upload_dir + etd_name + "/" + output_fname))
                with open(upload_dir + etd_name + "/" + output_fname) as output_f:
                    with open("./TestFiles/" + output_fname) as correct_f:
                        print "Testing %s..." % output_fname
                        # The generated link will be different each time so we should replace it with something standard
                        output_text = [re.sub(fulltext_pattern, "<fulltext-url>LINK</fulltext-url>", line) for line in output_f.readlines()]
                        correct_text = [re.sub(fulltext_pattern, "<fulltext-url>LINK</fulltext-url>", line) for line in correct_f.readlines()]
                        # Do a diff of the generated file and the correct output
                        for line in context_diff(correct_text, output_text):
                            sys.stdout.write(line)
                        # Check if the generated output matches the correct output
                        self.assertEqual(output_text, correct_text)

            # Test Dropbox uploads
            print "Testing if everything is in Dropbox..."
            file_pattern = re.compile(r'\[F\]')
            for etd in self.etd_dirs[test_dir]:
                # If the correct output for a zip is not present we should skip it
                if not os.path.exists("./TestFiles/" + etd + "_Output.xml"):
                    continue

                dbu_listing = subprocess.check_output([P2B.DBUPLOADER_PATH, "list", P2B.DB_DIR + bname + "/" + etd +  "/"])
                self.assertEqual(re.search(file_pattern, dbu_listing) != None, True)
 def test_unzip(self):
     self.addFiles()
     for test_dir in self.test_dirs:
         upload_dir = os.path.join(P2B.UPLOAD_DIR,
                                   os.path.basename(test_dir)) + os.sep
         for i in range(len(self.zip_files[test_dir])):
             P2B.unzip(upload_dir, upload_dir + self.zip_files[test_dir][i])
             # Check that a new directory was made for the etd
             self.assertTrue(
                 os.path.exists(upload_dir + self.etd_dirs[test_dir][i]))
             # Check that there are files present in the newly created directory
             self.assertTrue(
                 glob.glob(P2B.UPLOAD_DIR + self.etd_dirs[test_dir][i] +
                           "/*") is not None)
    def test_transform_files(self):
        self.addFiles()

        for test_dir in self.test_dirs:
            # TODO: This logic really shouldn't have to be in the tests.
            bname = os.path.basename(os.path.normpath(test_dir))
            if (not P2B.config.has_option('email', bname)) or (P2B.config.get(
                    'email', bname) == ''):
                print "No email confiugred for %s option in [email]" % bname
                print "Skipping this folder until one is configured."
                continue
            P2B.RESULT_EMAIL = P2B.config.get('email', bname)

            upload_dir = os.path.join(P2B.UPLOAD_DIR,
                                      os.path.basename(test_dir)) + os.sep

            # Unzip each zip file
            for zipf in self.zip_files[test_dir]:
                P2B.unzip(upload_dir, upload_dir + zipf)

            # Test each zip
            for zipf in self.zip_files[test_dir]:
                # If the correct output for a zip is not present we should skip it
                if not os.path.exists("./TestFiles/" +
                                      os.path.splitext(zipf)[0] +
                                      "_Output.xml"):
                    print "Missing correct output for %s. Skipping." % zipf
                    continue

                print "Testing %s..." % zipf
                etd_name = os.path.splitext(zipf)[0]
                P2B.transform_files(upload_dir + etd_name + '/')

                output_fname = etd_name + "_Output.xml"
                self.assertTrue(
                    os.path.exists(upload_dir + etd_name + "/" + output_fname))
                with open(upload_dir + etd_name + "/" +
                          output_fname) as output_f:
                    with open("./TestFiles/" + output_fname) as correct_f:
                        print "Testing %s..." % output_fname
                        # The generated link will be different each time so we should replace it with something standard
                        output_text = [
                            re.sub(fulltext_pattern,
                                   "<fulltext-url>LINK</fulltext-url>", line)
                            for line in output_f.readlines()
                        ]
                        correct_text = [
                            re.sub(fulltext_pattern,
                                   "<fulltext-url>LINK</fulltext-url>", line)
                            for line in correct_f.readlines()
                        ]
                        # Do a diff of the generated file and the correct output
                        for line in context_diff(correct_text, output_text):
                            sys.stdout.write(line)
                        # Check if the generated output matches the correct output
                        self.assertEqual(output_text, correct_text)

            # Test Dropbox uploads
            print "Testing if everything is in Dropbox..."
            file_pattern = re.compile(r'\[F\]')
            for etd in self.etd_dirs[test_dir]:
                # If the correct output for a zip is not present we should skip it
                if not os.path.exists("./TestFiles/" + etd + "_Output.xml"):
                    continue

                dbu_listing = subprocess.check_output([
                    P2B.DBUPLOADER_PATH, "list",
                    P2B.DB_DIR + bname + "/" + etd + "/"
                ])
                self.assertEqual(
                    re.search(file_pattern, dbu_listing) != None, True)