Example #1
0
	def test_save_first_minutes_document(self):
		# get the editor page and save the site
		response = self.app.get(reverse('documents:create', args=['minutesdocument']) + '?group={}'.format(self.group.id), user=self.user)
		self.assertEqual(response.status_code, 200)

		form = response.forms['document-form']
		text = "Lorem ipsum"
		form.set('text_en', text)
		form.set('comment', text)
		form.set('url_title', slugify(text))

		response = form.submit().follow()
		self.assertEqual(response.status_code, 200)

		document = MinutesDocument.objects.get(url_title=slugify(text))

		# check whether number of versions is correct
		versions = Version.objects.get_for_object(document)
		self.assertEqual(len(versions), 1)

		# check whether the properties of the new document are correct
		self.assertEqual((document.title_en, document.title_de), MinutesDocument.generate_new_title())
		self.assertEqual(document.author, self.user)
		self.assertEqual(document.moderator, self.user)
		self.assertEqual(document.text_en, text)
		self.assertEqual(versions[0].revision.get_comment(), text)
		self.assertListEqual(list(document.participants.all().order_by('username')), list(self.group.user_set.all().order_by('username')))

		checker = ObjectPermissionChecker(self.group)
		self.assertTrue(checker.has_perm(document.edit_permission_name, document))
Example #2
0
	def test_save_another_minutes_document(self):
		test_title = "Test title"
		test_moderator = baker.make(UserProfile)
		first_document = baker.make(MinutesDocument, title_en=test_title, moderator=test_moderator)
		first_document.set_all_permissions(self.group)

		# get the editor page and save the site
		response = self.app.get(reverse('documents:create', args=['minutesdocument']) + '?group={}'.format(self.group.id), user=self.user)
		self.assertEqual(response.status_code, 200)

		form = response.forms['document-form']
		text = "Lorem ipsum"
		form.set('text_en', text)
		form.set('comment', text)
		form.set('url_title', slugify(text))

		response = form.submit().follow()
		self.assertEqual(response.status_code, 200)

		document = MinutesDocument.objects.get(url_title=slugify(text))

		# check whether the properties of the new document are correct
		self.assertEqual(document.title_en, test_title)  # should be taken from previous minutes document
		self.assertEqual(document.moderator, test_moderator)  # should be taken from previous minutes document
		self.assertEqual(document.author, self.user)
		self.assertEqual(document.text_en, text)
		self.assertListEqual(list(document.participants.all().order_by('username')), list(self.group.user_set.all().order_by('username')))
Example #3
0
	def test_save_another_minutes_document(self):
		test_title = "Test title"
		test_moderator = mommy.make(UserProfile)
		first_document = mommy.make(MinutesDocument, title=test_title, moderator=test_moderator)
		first_document.set_all_permissions(self.group)

		# get the editor page and save the site
		response = self.app.get(reverse('documents:create', args=['minutesdocument']) + '?group={}'.format(self.group.id), user=self.user)
		self.assertEqual(response.status_code, 200)

		form = response.forms['document-form']
		text = "Lorem ipsum"
		form.set('text', text)
		form.set('comment', text)
		form.set('url_title', slugify(text))

		response = form.submit().follow()
		self.assertEqual(response.status_code, 200)

		document = MinutesDocument.objects.get(url_title=slugify(text))

		# check whether the properties of the new document are correct
		self.assertEqual(document.title, test_title)  # should be taken from previous minutes document
		self.assertEqual(document.moderator, test_moderator)  # should be taken from previous minutes document
		self.assertEqual(document.author, self.user)
		self.assertEqual(document.text, text)
		self.assertListEqual(list(document.participants.all().order_by('username')), list(self.group.user_set.all().order_by('username')))
Example #4
0
	def test_save_first_minutes_document(self):
		# get the editor page and save the site
		response = self.app.get(reverse('documents:create', args=['minutesdocument']) + '?group={}'.format(self.group.id), user=self.user)
		self.assertEqual(response.status_code, 200)

		form = response.forms['document-form']
		text = "Lorem ipsum"
		form.set('text', text)
		form.set('comment', text)
		form.set('url_title', slugify(text))

		response = form.submit().follow()
		self.assertEqual(response.status_code, 200)

		document = MinutesDocument.objects.get(url_title=slugify(text))

		# check whether number of versions is correct
		versions = Version.objects.get_for_object(document)
		self.assertEqual(len(versions), 1)

		# check whether the properties of the new document are correct
		self.assertEqual(document.title, MinutesDocument.generate_new_title())
		self.assertEqual(document.author, self.user)
		self.assertEqual(document.moderator, self.user)
		self.assertEqual(document.text, text)
		self.assertEqual(versions[0].revision.comment, text)
		self.assertListEqual(list(document.participants.all().order_by('username')), list(self.group.user_set.all().order_by('username')))

		checker = ObjectPermissionChecker(self.group)
		self.assertTrue(checker.has_perm(document.edit_permission_name, document))
Example #5
0
	def test_autosave_newPage(self):
		# create document
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertEqual(response.status_code, 200)
		form = response.forms['document-form']
		url_title = slugify(form.get('title').value)

		# autosave AUTO
		response = self.app.post(reverse('documents:autosave', args=[url_title]), {'text': 'AUTO', 'title': form.get('title').value, 'comment': ''}, xhr=True)
		self.assertEqual(response.status_code, 200)

		# on the new page site should be a banner with a restore link
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertEqual(response.status_code, 200)
		self.assertIn((reverse('edit', args=[url_title]) + '?restore'), str(response.body))

		user2 = mommy.make(UserProfile, is_superuser=True)
		# on the new page site should be a banner with a restore link but not for another user
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=user2)
		self.assertEqual(response.status_code, 200)
		self.assertNotIn((reverse('edit', args=[url_title]) + '?restore'), str(response.body))

		# create second document
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertEqual(response.status_code, 200)
		form = response.forms['document-form']
		url_title2 = slugify(form.get('title').value)

		# autosave second document AUTO
		response = self.app.post(reverse('documents:autosave', args=[url_title2]), {'text': 'AUTO', 'title': form.get('title').value, 'comment': ''}, user=self.user, xhr=True)
		self.assertEqual(response.status_code, 200)

		# on the new page site should be a banner with a restore link for both sites
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertIn((reverse('edit', args=[url_title]) + '?restore'), str(response.body))
		self.assertIn((reverse('edit', args=[url_title2]) + '?restore'), str(response.body))

		# if not loading autosave text should be still empty
		response = self.app.get(reverse('edit', args=[url_title]), user=self.user)
		self.assertEqual(response.status_code, 200)
		form = response.forms['document-form']
		self.assertEqual(form.get('text').value, '')

		# if loading autosave text should be AUTO
		response = self.app.get(reverse('edit', args=[url_title]), {'restore': ''}, user=self.user)
		self.assertEqual(response.status_code, 200)
		form = response.forms['document-form']
		self.assertEqual(form.get('text').value, 'AUTO')
Example #6
0
    def test_save_new_page(self):
        # get the editor page and save the site
        response = self.app.get(reverse('documents:create',
                                        args=['informationdocument']),
                                user=self.user)
        self.assertEqual(response.status_code, 200)

        form = response.forms['document-form']
        text = "Hallo Bibi Blocksberg!"
        form.set('text_en', text)
        form.set('title_en', text)
        form.set('comment', text)
        form.set('url_title', slugify(text))
        form.set('group', self.group.pk)

        response = form.submit().follow()
        self.assertEqual(response.status_code, 200)

        document = InformationDocument.objects.get(title_en=text)

        # check whether number of versions is correct
        versions = Version.objects.get_for_object(document)
        self.assertEqual(len(versions), 1)

        # check whether the properties of the new document are correct
        self.assertEqual(document.title_en, text)
        self.assertEqual(document.text_en, text)
        self.assertEqual(versions[0].revision.get_comment(), text)
Example #7
0
File: tests.py Project: xasetl/1327
	def test_save_new_page(self):
		# get the editor page and save the site
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertEqual(response.status_code, 200)

		form = response.forms[0]
		text = "Hallo Bibi Blocksberg!"
		form.set('text', text)
		form.set('title', text)
		form.set('comment', text)
		form.set('url_title', slugify(text))
		form.set('group', self.group.pk)

		response = form.submit().follow()
		self.assertEqual(response.status_code, 200)

		document = InformationDocument.objects.get(title=text)

		# check whether number of versions is correct
		versions = Version.objects.get_for_object(document)
		self.assertEqual(len(versions), 1)

		# check whether the properties of the new document are correct
		self.assertEqual(document.title, text)
		self.assertEqual(document.text, text)
		self.assertEqual(versions[0].revision.comment, text)
Example #8
0
	def clean_url_title(self):
		super().clean()
		url_title = self.cleaned_data['url_title'].lower()
		if not slugify(url_title) == url_title:
			raise ValidationError(_('Only the following characters are allowed in the URL: a-z, -, _, /'))
		if any(url_part in settings.FORBIDDEN_URLS for url_part in url_title.split('/')):
			raise ValidationError(_('The URL used for this page is not allowed.'))
		if Document.objects.filter(url_title=url_title).exclude(id=self.instance.id).exists():
			raise ValidationError(_('The URL used for this page is already taken.'))
		return url_title
Example #9
0
	def generate_default_slug(cls, title):
		slug = slugify(title)
		count = 2

		while Document.objects.filter(url_title=slug).exists():
			# check whether current title already ends with '_\d+' and handle this case accordingly
			temp_suffix_match = re.search(r'_(?P<count>\d+)$', slug)
			if temp_suffix_match:
				slug = slug[:temp_suffix_match.start()]

			slug = "{}_{}".format(slug, count)
			count += 1
		return slug
Example #10
0
	def generate_default_slug(cls, title):
		slug = slugify(title)
		count = 2

		while Document.objects.filter(url_title=slug).exists():
			# check whether current title already ends with '_\d+' and handle this case accordingly
			temp_suffix_match = re.search(r'_(?P<count>\d+)$', slug)
			if temp_suffix_match:
				slug = slug[:temp_suffix_match.start()]

			slug = "{}_{}".format(slug, count)
			count += 1
		return slug
Example #11
0
def pre_save_document(sender, instance, *args, **kwargs):
    """
		creates a slugified title that can be used as URL to the Document
		This will be used to identify a document that a user wants to see.
		In case someone creates a document with the same title it is not not defined
		which document might show up. So please try to avoid that ;)
	"""
    if sender not in Document.__subclasses__():
        return

    # get the max_length of a slug field as we need to make sure it is no longer than that
    # as slugify is not doing that for us
    for field in Document._meta.fields:
        if field.verbose_name == 'url_title' and instance.url_title == "":
            instance.url_title = slugify(instance.title)[:field.max_length]
            return
Example #12
0
	def test_autosave_with_different_document_types(self):
		# create document
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertEqual(response.status_code, 200)
		form = response.forms['document-form']
		url_title = slugify(form.get('title').value)

		# autosave AUTO
		response = self.app.post(reverse('documents:autosave', args=[url_title]), {'text': 'AUTO', 'title': form.get('title').value, 'comment': '', 'group': mommy.make(Group)}, xhr=True)
		self.assertEqual(response.status_code, 200)

		# there should be no restore link on creation page for different document type
		response = self.app.get(reverse('documents:create', args=['poll']), user=self.user)
		self.assertNotIn((reverse('edit', args=[url_title]) + '?restore'), str(response.body))

		# on the new page site should be a banner with a restore link
		response = self.app.get(reverse('documents:create', args=['informationdocument']), user=self.user)
		self.assertEqual(response.status_code, 200)
		self.assertIn((reverse('edit', args=[url_title]) + '?restore'), str(response.body))
Example #13
0
	def save(self, *args, **kwargs):
		# make sure that the url is slugified
		self.url_title = slugify(self.url_title)
		super().save(*args, **kwargs)
Example #14
0
	def save(self, *args, **kwargs):
		# make sure that the url is slugified
		self.url_title = slugify(self.url_title)
		super().save(*args, **kwargs)
Example #15
0
	def generate_default_slug(cls, title):
		return slugify(title)
Example #16
0
	def generate_default_slug(cls, title):
		return slugify(title)