Beispiel #1
0
 def test_updating_to_same_active_start_date(self):
     new_site = Site(name='TEST',
                     url='https://test.com',
                     active_start_date='2015-10-10',
                     course_type='SPOC',
                     site_type='General')
     new_site.save()
     form_data = {
         'name': 'TEST',
         'site_type': 'General',
         'url': 'https://test.com',
         'active_start_date': '2015-10-10',
         'course_type': 'SPOC'
     }
     form = SiteForm(data=form_data)
     self.assertFalse(form.is_valid())
     self.assertEqual(
         form.errors['__all__'],
         ["Site with this Url and Active start date already exists."])
     # Will give an error message
     response = self.client.post('/sites/update_site/' + str(new_site.pk) +
                                 '/',
                                 form_data,
                                 follow=True)
     self.assertEqual(Site.objects.count(), 1)
     storage = response.context['messages']
     self.assertEqual(len(storage), 1)
     self.assertIn(
         "Site with this Url and Active start date already exists.",
         list(storage)[0].message)
Beispiel #2
0
    def test_updating_with_valid_changes(self):
        new_site = Site(name='TEST', url='https://test.com', active_start_date=datetime(2015, 10, 10, 15, 55),
                        course_type='SPOC', site_type='General')
        new_site.save()
        form_data = {
            'name': 'TEST2',
            'site_type': 'General',
            'url': 'https://test.com',
            'active_start_date': datetime.now(),
            'course_type': 'MOOC',
            'active_learner_count': 50,
            'notes': 'Some basic changes'
        }
        form = SiteForm(data=form_data)
        self.assertTrue(form.is_valid())

        self.assertEqual(Site.objects.count(), 1)
        self.client.post('/sites/update_site/'+str(new_site.pk)+'/', form_data)

        updated_site = Site.objects.filter(url='https://test.com').order_by('-active_start_date').first()
        old_site = Site.objects.filter(url='https://test.com').order_by('-active_start_date').last()
        self.assertEqual(Site.objects.count(), 2)
        self.assertEqual(Site.objects.filter(url='https://test.com').count(), 2)
        self.assertEqual(updated_site.course_type, 'MOOC')
        self.assertEqual(updated_site.notes, 'Some basic changes')
        self.assertEqual(old_site.notes, '')
        self.assertGreater(updated_site.active_start_date, old_site.active_start_date)
        self.assertEqual(updated_site.active_start_date, old_site.active_end_date)
        self.assertIsNone(updated_site.active_end_date)
Beispiel #3
0
    def test_updating_with_no_changes(self):
        new_site = Site(name='TEST',
                        url='https://test.com',
                        active_start_date=datetime(2015, 10, 10, 15, 55),
                        course_type='SPOC',
                        site_type='General')
        new_site.save()
        form_data = {
            'name': 'TEST',
            'site_type': 'General',
            'url': 'https://test.com',
            'active_start_date': datetime.now(),
            'course_type': 'SPOC'
        }
        form = SiteForm(data=form_data)
        self.assertTrue(form.is_valid())

        self.assertEqual(Site.objects.count(), 1)
        self.client.post('/sites/update_site/' + str(new_site.pk) + '/',
                         form_data)

        updated_site = Site.objects.filter(
            url='https://test.com').order_by('-active_start_date').first()
        old_site = Site.objects.filter(
            url='https://test.com').order_by('-active_start_date').last()
        self.assertEqual(Site.objects.count(), 2)
        self.assertEqual(
            Site.objects.filter(url='https://test.com').count(), 2)
        self.assertEqual(updated_site.course_type, old_site.course_type)
        self.assertGreater(updated_site.active_start_date,
                           old_site.active_start_date)
        self.assertEqual(updated_site.active_start_date,
                         old_site.active_end_date)
        self.assertIsNone(updated_site.active_end_date)
Beispiel #4
0
    def test_add_an_old_version(self):
        new_site = Site(url='https://test.com',
                        active_start_date='2016-10-10 16:30',
                        course_type='SPOC')
        new_site.save()
        form_data = {
            'site_type': 'TEST',
            'url': 'https://test.com',
            'active_start_date': '2016-10-10 14:30',
            'course_type': 'Both'
        }
        form = SiteForm(data=form_data)
        self.assertTrue(form.is_valid())

        self.client.post('/sites/add_site/', form_data)

        updated_site = Site.objects.filter(
            url='https://test.com').order_by('-active_start_date').first()
        old_site = Site.objects.filter(
            url='https://test.com').order_by('-active_start_date').last()
        self.assertEqual(Site.objects.count(), 2)
        self.assertEqual(
            Site.objects.filter(url='https://test.com').count(), 2)
        self.assertEqual(updated_site.course_type, 'SPOC')
        self.assertEqual(old_site.active_start_date,
                         datetime(2016, 10, 10, 14, 30))
        self.assertEqual(old_site.active_end_date,
                         datetime(2016, 10, 10, 16, 30))
        self.assertIsNone(updated_site.active_end_date)
Beispiel #5
0
 def test_navigating_to_update_page_for_non_current_version(self):
     outdated_site = Site(name='TEST', url='https://test.com', active_start_date='2015-10-10',
                          active_end_date='2015-11-11', course_type='SPOC', site_type='General')
     outdated_site.save()
     response = self.client.get('/sites/update_site/'+str(outdated_site.pk)+'/')
     self.assertEqual(Site.objects.count(), 1)
     self.assertEqual(response.status_code, 403)
Beispiel #6
0
 def test_navigating_to_update_page_for_non_current_version(self):
     outdated_site = Site(name='TEST',
                          url='https://test.com',
                          active_start_date='2015-10-10',
                          active_end_date='2015-11-11',
                          course_type='SPOC',
                          site_type='General')
     outdated_site.save()
     response = self.client.get('/sites/update_site/' +
                                str(outdated_site.pk) + '/')
     self.assertEqual(Site.objects.count(), 1)
     self.assertEqual(response.status_code, 403)
Beispiel #7
0
    def test_form_validation_for_existing_url(self):
        new_site = Site(url='https://lagunitas.stanford.edu', active_start_date='2016-10-10')
        new_site.save()
        form_data = {'url': 'https://lagunitas.stanford.edu', 'active_start_date': '2016-10-10'}
        form = SiteForm(data=form_data)
        self.assertFalse(form.is_valid())
        self.assertEqual(form.errors['__all__'], ["Site with this Url and Active start date already exists."])

        # Will give an error message
        response = self.client.post('/sites/add_site/', form_data, follow=True)
        self.assertEqual(Site.objects.count(), 1)
        storage = response.context['messages']
        self.assertEqual(len(storage), 1)
        self.assertIn("Site with this Url and Active start date already exists.", list(storage)[0].message)
Beispiel #8
0
 def test_updating_non_current_version(self):
     outdated_site = Site(name='TEST', url='https://test.com', active_start_date='2015-10-10',
                          active_end_date='2015-11-11', course_type='SPOC', site_type='General')
     outdated_site.save()
     form_data = {
         'name': 'TEST',
         'site_type': 'General',
         'url': 'https://test.com',
         'active_start_date': '2015-10-10',
         'course_type': 'SPOC'
     }
     # Will give an error message
     response = self.client.post('/sites/update_site/' + str(outdated_site.pk) + '/', form_data)
     self.assertEqual(response.status_code, 403)
     self.assertEqual(Site.objects.count(), 1)
     self.assertEqual(Site.objects.get(url='https://test.com'), outdated_site)
Beispiel #9
0
    def test_site_get_languages_method(self):
        new_site = Site()
        new_site.save()
        lang1 = Language(name="lang1")
        lang2 = Language(name="lang2")
        lang1.save()
        lang2.save()
        sitelang1 = SiteLanguage(site_id=new_site.pk, language_id=lang1.pk)
        sitelang2 = SiteLanguage(site_id=new_site.pk, language_id=lang2.pk)

        sitelang1.save()
        sitelang2.save()

        # Renamed from assertItemsEqual in python 2
        self.assertCountEqual(new_site.get_languages(), "lang1, lang2")
        self.assertEqual(str(new_site), " --- ")
        self.assertEqual(str(sitelang2), "---lang2")
Beispiel #10
0
    def test_site_get_languages_method(self):
        new_site = Site()
        new_site.save()
        lang1 = Language(name="lang1")
        lang2 = Language(name="lang2")
        lang1.save()
        lang2.save()
        sitelang1 = SiteLanguage(site_id=new_site.pk, language_id=lang1.pk)
        sitelang2 = SiteLanguage(site_id=new_site.pk, language_id=lang2.pk)

        sitelang1.save()
        sitelang2.save()

        # Renamed from assertItemsEqual in python 2
        self.assertCountEqual(new_site.get_languages(), "lang1, lang2")
        self.assertEqual(str(new_site), " --- ")
        self.assertEqual(str(sitelang2), "---lang2")
Beispiel #11
0
    def test_site_get_geographies_method_with_unicode(self):
        new_site = Site()
        new_site.url = "https://www.κόσμε.co"
        new_site.save()
        geozone1 = GeoZone(name="Greece")
        geozone2 = GeoZone(name="\u00e9")
        geozone1.save()
        geozone2.save()
        sitegeozone1 = SiteGeoZone(site_id=new_site.pk, geo_zone_id=geozone1.pk)
        sitegeozone2 = SiteGeoZone(site_id=new_site.pk, geo_zone_id=geozone2.pk)

        sitegeozone1.save()
        sitegeozone2.save()

        # Renamed from assertItemsEqual in python 2
        self.assertCountEqual(new_site.get_geographies(), "Greece, \u00e9")
        self.assertEqual(str(sitegeozone1), "https://www.κόσμε.co---Greece")
        self.assertEqual(str(geozone2), "\u00e9")
Beispiel #12
0
 def test_updating_to_same_active_start_date(self):
     new_site = Site(name='TEST', url='https://test.com', active_start_date='2015-10-10',
                     course_type='SPOC', site_type='General')
     new_site.save()
     form_data = {
         'name': 'TEST',
         'site_type': 'General',
         'url': 'https://test.com',
         'active_start_date': '2015-10-10',
         'course_type': 'SPOC'
     }
     form = SiteForm(data=form_data)
     self.assertFalse(form.is_valid())
     self.assertEqual(form.errors['__all__'], ["Site with this Url and Active start date already exists."])
     # Will give an error message
     response = self.client.post('/sites/update_site/'+str(new_site.pk)+'/', form_data, follow=True)
     self.assertEqual(Site.objects.count(), 1)
     storage = response.context['messages']
     self.assertEqual(len(storage), 1)
     self.assertIn("Site with this Url and Active start date already exists.", list(storage)[0].message)
Beispiel #13
0
    def test_add_a_new_version(self):
        new_site = Site(url='https://test.com', active_start_date='2016-10-10 15:55', course_type='SPOC')
        new_site.save()
        form_data = {
            'site_type': 'TEST',
            'url': 'https://test.com',
            'active_start_date': '2016-10-10 16:30',
            'course_type': 'Both'
        }
        form = SiteForm(data=form_data)
        self.assertTrue(form.is_valid())

        self.client.post('/sites/add_site/', form_data)

        updated_site = Site.objects.filter(url='https://test.com').order_by('-active_start_date').first()
        old_site = Site.objects.filter(url='https://test.com').order_by('-active_start_date').last()
        self.assertEqual(Site.objects.count(), 2)
        self.assertEqual(Site.objects.filter(url='https://test.com').count(), 2)
        self.assertEqual(updated_site.course_type, 'Both')
        self.assertEqual(old_site.active_end_date, datetime(2016, 10, 10, 16, 30))
        self.assertIsNone(updated_site.active_end_date)
Beispiel #14
0
    def test_form_validation_for_existing_url(self):
        new_site = Site(url='https://lagunitas.stanford.edu',
                        active_start_date='2016-10-10')
        new_site.save()
        form_data = {
            'url': 'https://lagunitas.stanford.edu',
            'active_start_date': '2016-10-10'
        }
        form = SiteForm(data=form_data)
        self.assertFalse(form.is_valid())
        self.assertEqual(
            form.errors['__all__'],
            ["Site with this Url and Active start date already exists."])

        # Will give an error message
        response = self.client.post('/sites/add_site/', form_data, follow=True)
        self.assertEqual(Site.objects.count(), 1)
        storage = response.context['messages']
        self.assertEqual(len(storage), 1)
        self.assertIn(
            "Site with this Url and Active start date already exists.",
            list(storage)[0].message)
Beispiel #15
0
 def test_updating_non_current_version(self):
     outdated_site = Site(name='TEST',
                          url='https://test.com',
                          active_start_date='2015-10-10',
                          active_end_date='2015-11-11',
                          course_type='SPOC',
                          site_type='General')
     outdated_site.save()
     form_data = {
         'name': 'TEST',
         'site_type': 'General',
         'url': 'https://test.com',
         'active_start_date': '2015-10-10',
         'course_type': 'SPOC'
     }
     # Will give an error message
     response = self.client.post(
         '/sites/update_site/' + str(outdated_site.pk) + '/', form_data)
     self.assertEqual(response.status_code, 403)
     self.assertEqual(Site.objects.count(), 1)
     self.assertEqual(Site.objects.get(url='https://test.com'),
                      outdated_site)
Beispiel #16
0
    def test_site_get_geographies_method_with_unicode(self):
        new_site = Site()
        new_site.url = "https://www.κόσμε.co"
        new_site.save()
        geozone1 = GeoZone(name="Greece")
        geozone2 = GeoZone(name="\u00e9")
        geozone1.save()
        geozone2.save()
        sitegeozone1 = SiteGeoZone(site_id=new_site.pk,
                                   geo_zone_id=geozone1.pk)
        sitegeozone2 = SiteGeoZone(site_id=new_site.pk,
                                   geo_zone_id=geozone2.pk)

        sitegeozone1.save()
        sitegeozone2.save()

        # Renamed from assertItemsEqual in python 2
        self.assertCountEqual(new_site.get_geographies(), "Greece, \u00e9")
        self.assertEqual(str(sitegeozone1), "https://www.κόσμε.co---Greece")
        self.assertEqual(str(geozone2), "\u00e9")
Beispiel #17
0
def add_site(request, pk=None):
    if pk:
        s = get_object_or_404(Site, pk=pk)
        # Do not allow edits of old versions
        # TODO: Make this more user friendly
        if s.active_end_date is not None:
            response = HttpResponse()
            response.status_code = 403
            return response
    else:
        s = Site()

    if request.method == 'POST':
        form = SiteForm(request.POST, instance=s)
        if form.is_valid():
            new_site = form.save(commit=False)
            new_form_created_time = new_site.active_start_date
            # We must check for uniqueness explicitly, as SiteForm has trouble raising unique key errors for duplicate
            # site entries when trying to update a site
            try:
                new_site.pk = None
                new_site.validate_unique()
            except ValidationError as err:
                messages.error(request, ",".join(err.messages))
                return render_site_form(request, form, pk)

            if pk: # If updating
                # We must grab the same object from the DB again, as s is linked to the form and using it here will
                # cause duplicate key errors
                old_version = Site.objects.get(pk=pk)
                old_version.active_end_date = new_form_created_time
                old_version.save()
            else:
                # Check if there are other versions of site
                if Site.objects.filter(url=new_site.url).count() > 0:
                    next_most_recent_version_of_site = None
                    # Check if any existing sites were created with a more recent start date
                    for site in Site.objects.filter(url=new_site.url).order_by('active_start_date'):
                        if site.active_start_date > new_form_created_time:
                            next_most_recent_version_of_site = site
                            break

                    if next_most_recent_version_of_site is not None:
                        # The version being submitted is older than current version
                        new_site.active_end_date = next_most_recent_version_of_site.active_start_date
                    else:
                        # The version being submitted is newer than current version
                        next_most_recent_version_of_site = Site.objects.filter(url=new_site.url).order_by(
                            '-active_start_date').first()
                        next_most_recent_version_of_site.active_end_date = new_form_created_time
                        next_most_recent_version_of_site.save()

            languages = form.cleaned_data.pop('language')
            geozones = form.cleaned_data.pop('geography')

            new_site.save(force_insert=True)

            if pk: # Delete existing languages and geographies if updating to prevent duplicates
                new_site.language.clear()
                new_site.geography.clear()

            for l in languages:
                site_language = SiteLanguage.objects.create(language=l, site=new_site)
                site_language.save()

            for g in geozones:
                site_geozone = SiteGeoZone.objects.create(geo_zone=g, site=new_site)
                site_geozone.save()

            messages.success(request, 'Success! A new site version has been added!')
            return HttpResponseRedirect(reverse('sites:sites_list'))

        else:
            # Display errors
            form_errors_string = generate_form_errors_string(form.errors)
            messages.error(request, 'Oops! Something went wrong! Details: %s' % form_errors_string)

    else:
        if pk:
            form = SiteForm(initial={'active_start_date':datetime.now()}, instance=s)
        else:
            form = SiteForm()

    return render_site_form(request, form, pk)