def test_run(self, MockClass, set_page, delete_saved_files,
                 save_uploaded_file, m_):
        instance = MockClass.return_value
        instance.__getitem__ = lambda s, key: self.fields[key]
        instance.__contains__ = lambda s, key: key in self.fields
        set_page.return_value = 0
        delete_saved_files.return_value = 'dsf'
        save_uploaded_file.return_value = 'suf'

        def _(message):
            return message

        m_.side_effect = _
        fa = fileupl.FormAnalyzer()
        self.fields["file"] = self.TestField("foo")
        self.fields["author"] = self.TestField("a1")
        self.assertEqual(fa.run(), ('suf', 0, True))
        self.fields.clear()
        self.fields["kill"] = self.TestField("k")
        self.fields["target"] = self.TestField("t")
        self.assertEqual(fa.run(), ('dsf', 0, True))
        self.fields.clear()
        self.fields["page"] = self.TestField("p")
        set_page.return_value = 1
        self.assertEqual(fa.run(), ('', 1, False))
        set_page.return_value = -1
        self.assertEqual(fa.run(),
                         (_('Invalid page number specified.'), -1, True))
        self.fields.clear()
        self.fields["file"] = self.TestField("foo")
        self.assertEqual(fa.run(), (_('Invalid form parameter.'), 0, True))
        self.fields.clear()
        self.assertEqual(fa.run(), ('', 0, False))
    def test_delete_saved_file(self, readdirfile, remove, m_):
        remove.return_value = True

        def _(message):
            return message

        m_.side_effect = _

        mpass = mock.Mock()
        mtarget = mock.Mock()
        mtarget.value = '/home/foo/mtgt.txt'
        m1 = dict(target=mtarget)
        m1['pass'] = mpass
        mpass.value = ''
        readdirfile.return_value = ''
        logging.debug('m1[\'pass\'].value')
        logging.debug(m1['pass'].value)
        fa = fileupl.FormAnalyzer()
        self.assertEqual(fa.delete_saved_files(m1),
                         _('The file successfully deleted.'))
        mpass.value = ''
        readdirfile.return_value = '123'
        self.assertEqual(fa.delete_saved_files(m1), _('Invalid password.'))
        mpass.value = '1234'
        readdirfile.return_value = '1234'
        self.assertEqual(fa.delete_saved_files(m1),
                         _('The file successfully deleted.'))
    def test_delete_oldest(self, listdir, remove):

        list_dirs = []

        def make_list(num):
            LIST_DIRS = []
            for i in xrange(num):
                s = str(random.randint(1, 100000))
                if s not in LIST_DIRS:
                    LIST_DIRS.append(s)
            return LIST_DIRS

        def mremove(x):
            base, ext = os.path.splitext(x)
            if ext == '.txt':
                logging.debug('mremove: 1 deleted.')
                listdir.return_value = list_dirs.pop()

        list_dirs = make_list(fileupl.maxfilenum)
        listdir.return_value = list_dirs
        remove.side_effect = mremove
        fa = fileupl.FormAnalyzer()
        logging.debug('before delete_oldest')
        logging.debug(list_dirs)
        logging.debug('len = %d' % len(list_dirs))
        fa.delete_oldest()
        logging.debug('after delete_oldest')
        logging.debug(list_dirs)
        logging.debug('len = %d' % len(list_dirs))
        self.assertTrue(len(list_dirs) == fileupl.maxfilenum)

        list_dirs = make_list(fileupl.maxfilenum + 1)
        listdir.return_value = list_dirs
        remove.side_effect = mremove
        fa = fileupl.FormAnalyzer()
        rs = fileupl.listdir('.')
        logging.debug('fileupl.listdir')
        logging.debug(rs)
        logging.debug('before delete_oldest')
        logging.debug(list_dirs)
        logging.debug('len = %d' % len(list_dirs))
        fa.delete_oldest()
        logging.debug('after delete_oldest')
        logging.debug(list_dirs)
        logging.debug('len = %d' % len(list_dirs))
        self.assertTrue(len(list_dirs) == fileupl.maxfilenum)
 def test_chkExt(self):
     fa = fileupl.FormAnalyzer()
     goodlist = (".jpg", ".jpeg", ".png", ".gif")
     badlist = ("jpg", ".txt", ".gif2", "a.gif")
     for a in goodlist:
         t = fa.chkExt(a)
         self.assertTrue(t)
     for b in badlist:
         f = fa.chkExt(b)
         self.assertTrue(not f)
    def test_save_uploaded_file(self, delete_oldest, writedirfile, isfileimage,
                                remove, do_upload, m_):
        delete_oldest.return_value = True
        self.cc = 'a'

        def chk(a, b):
            self.cc = b

        writedirfile.side_effect = chk
        isfileimage.return_value = True
        remove.return_value = True
        do_upload.return_value = True

        def _(message):
            return message

        m_.side_effect = _

        mitem = mock.Mock()
        mau = mock.Mock()

        mitem.file = ''
        m1 = dict(file=mitem, author=mau)
        logging.debug('mitem.file')
        logging.debug(mitem.file)
        fa = fileupl.FormAnalyzer()
        self.assertEqual(fa.save_uploaded_file(m1),
                         _('No uploading file name specified.'))

        mitem.file = 1
        mitem.filename = '/home/foo/mocktest.txt'
        self.assertEqual(fa.save_uploaded_file(m1),
                         _('File extension not allowed.'))

        mitem.filename = '/home/foo/mocktest.jpg'
        self.assertEqual(fa.save_uploaded_file(m1),
                _('File size too large (max %s KB)') \
                        % str(fileupl.up_limit))

        do_upload.return_value = False
        self.assertEqual(fa.save_uploaded_file(m1), _('Not an image data.'))

        isfileimage.return_value = False
        self.cc = 'a'
        mau.value = ''
        r = fa.save_uploaded_file(m1)
        self.assertEqual(r, _('File successfully uploaded.'))
        self.assertEqual(self.cc, 'a')
        mau.value = '123'
        r = fa.save_uploaded_file(m1)
        self.assertEqual(r, _('File successfully uploaded.'))
        self.assertEqual(self.cc, '123')
 def test_set_page(self):
     mp = mock.Mock()
     m1 = dict(page=mp)
     mp.value = ''
     fa = fileupl.FormAnalyzer()
     self.assertEqual(fa.set_page(m1), -1)
     mp.value = '0'
     self.assertEqual(fa.set_page(m1), 0)
     mp.value = '43'
     self.assertEqual(fa.set_page(m1), 43)
     mp.value = '-5'
     self.assertEqual(fa.set_page(m1), -1)
     mp.value = '-4.5'
     self.assertEqual(fa.set_page(m1), -1)
     mp.value = 'a'
     self.assertEqual(fa.set_page(m1), -1)
    def test_do_upload(self):
        def file_maxsize(size):
            wb = open_temp_file()
            fpath = wb.name
            wb.close()
            os.remove(wb.name)
            uplb = open_temp_file(size)
            reachmax = fa.do_upload(uplb, fpath)
            uplb.close()
            os.remove(uplb.name)
            os.remove(fpath)
            return reachmax

        fa = fileupl.FormAnalyzer()
        self.assertRaises(TypeError, lambda: fa.do_upload(None, None))
        # 2nd arg must be str

        self.assertFalse(file_maxsize(0))
        self.assertFalse(file_maxsize(3))
        self.assertFalse(file_maxsize(1024 + 1))
        self.assertFalse(file_maxsize(1024 * (fileupl.up_limit - 1)))
        self.assertTrue(file_maxsize(1024 * (fileupl.up_limit - 1) + 1))