def testEmptyFile(self): """ No file contents -> EMPTY_FILE. """ self.fields['file'] = '' form = cgifactory.post(filenames=self.filenames, **self.fields) response = self.query(upload.main, form) #print(response) self.assertIn('EMPTY_FILE', response)
def testDefault(self): """ No args given -> login form. """ form = cgifactory.post() response = self.query(view.main, form) # print(response) self.assertIn("View Submissions", response) self.assertNotIn("Tamarin Error", response)
def testSubmittedOnlyView(self): """ View of single submitted file -> displays content. """ self.createFile(tamarin.SUBMITTED_ROOT, "JohndoeA01-20200606-1200.java", "submitted content") form = cgifactory.post(submission="JohndoeA01-20200606-1200.java", **self.fields) response = self.query(view.main, form) # print(response) self.assertIn("submitted content", response) self.assertNotIn("Tamarin Error", response)
def testEmptyView(self): """ Login -> view of no assignments. """ form = cgifactory.post(**self.fields) response = self.query(view.main, form) # print(response) self.assertIn("John Doe", response) self.assertIn("Not yet submitted", response) self.assertNotIn("Tamarin Error", response)
def testSubmittedOnly(self): """ Login -> view includes a submitted-only file. """ self.createFile(tamarin.SUBMITTED_ROOT, "JohndoeA01-20200606-1200.java", "submitted content") form = cgifactory.post(**self.fields) response = self.query(view.main, form) # print(response) self.assertIn("John Doe", response) self.assertIn("Not yet graded", response) self.assertNotIn("Tamarin Error", response)
def testGraded(self): """ Login -> view includes a graded file. """ self.createFile(Assignment("A01").path, "JohndoeA01-20200606-1300.java", "graded content") self.createFile(Assignment("A01").path, "JohndoeA01-20200606-1300-3-H.txt", "grader output") form = cgifactory.post(**self.fields) response = self.query(view.main, form) # print(response) self.assertIn("John Doe", response) self.assertIn("<b>Grade:</b> 3", response) self.assertNotIn("Tamarin Error", response)
def testBinaryFile(self): """ Binary data on a plain text assignment -> BINARY_FILE. """ self.fields['file'] = chr(0xB0) #fine for UTF-8, but not ascii tamarin.SUBMISSION_TYPES['java'].encoding = 'ascii' try: form = cgifactory.post(filenames=self.filenames, **self.fields) response = self.query(upload.main, form) #print(response) self.assertIn('BINARY_FILE', response) finally: tamarin.SUBMISSION_TYPES['java'].encoding = 'utf-8'
def testUndefinedType(self): dir = 'A92-21121212-1212-quark' try: os.mkdir(os.path.join(tamarin.GRADED_ROOT, dir)) self.filenames['file'] = 'JohndoeA92.java' form = cgifactory.post(filenames=self.filenames, **self.fields) response = self.query(upload.main, form) #print(response) self.assertIn('UNDEFINED_TYPE', response) finally: os.rmdir(os.path.join(tamarin.GRADED_ROOT, dir))
def testGraded(self): """ View of single graded file -> displays content. """ self.createFile(Assignment("A01").path, "JohndoeA01-20200606-1300.java", "graded content") self.createFile( Assignment("A01").path, "JohndoeA01-20200606-1300-3-H.txt", '<div class="grader">grader output</div>' ) form = cgifactory.post(submission="JohndoeA01-20200606-1300.java", **self.fields) response = self.query(view.main, form) # print(response) self.assertIn("graded content", response) self.assertIn("grader output", response) self.assertNotIn("Tamarin Error", response)
def testValidSubmission(self): """ A valid submission -> successfully processed. """ outputPath = os.path.join(tamarin.UPLOADED_ROOT, self.filenames['file']) try: form = cgifactory.post(filenames=self.filenames, **self.fields) response = self.query(upload.main, form) #print(response) self.assertIn('<input type="submit"', response) self.assertTrue(os.path.exists(outputPath), outputPath) finally: #clean up if os.path.exists(outputPath): os.remove(outputPath)
def testBadFilename(self): """ Filename is malformed -> appropriate error. """ tests = { 'Johndoe?A01.txt': 'INVALID_CHARS', 'JohndoeA01': 'BAD_EXTENSION', 'JohndoeA01.': 'BAD_EXTENSION', 'Johndoea01.txt': 'BAD_ASSIGNMENT', 'JohndoeA1.txt': 'BAD_ASSIGNMENT', 'JohndoeA01bc.txt': 'BAD_ASSIGNMENT', 'A01.txt': 'NO_USER_NAME', 'JohnDoeA01.txt': 'USERNAME_NOT_LOWERCASE', 'JohndoeA01.txt': 'WRONG_EXTENSION', 'johndoeA01.java': 'NO_INITIAL_CAP' } for name, error in tests.items(): self.filenames['file'] = name form = cgifactory.post(filenames=self.filenames, **self.fields) response = self.query(upload.main, form) #print(response) self.assertIn(error, response)
def testMissingFilename(self): """ Submitted file contents but not name -> NO_FILE. """ form = cgifactory.post(**self.fields) response = self.query(upload.main, form) #print(response) self.assertIn('NO_FILE_UPLOADED', response)