def test_update_service_areas(self): # This Library has no ServiceAreas associated with it. library = self._library() country1 = self._place(abbreviated_name="C1", type=Place.NATION) country2 = self._place(abbreviated_name="C2", type=Place.NATION) everywhere = AuthenticationDocument.COVERAGE_EVERYWHERE doc_dict = dict(service_area=everywhere, focus_area={ country1.abbreviated_name: everywhere, country2.abbreviated_name: everywhere }) doc = AuthenticationDocument.from_dict(self._db, doc_dict) problem = doc.update_service_areas(library) self._db.commit() eq_(None, problem) # Now this Library has three associated ServiceAreas. [a1, a2, a3] = sorted([(x.type, x.place.abbreviated_name) for x in library.service_areas]) everywhere_place = Place.everywhere(self._db) # Anyone is eligible for access. eq_(('eligibility', everywhere_place.abbreviated_name), a1) # But people in two particular countries are the focus. eq_(('focus', country1.abbreviated_name), a2) eq_(('focus', country2.abbreviated_name), a3) # Remove one of the countries from the focus, add a new one, # and try again. country3 = self._place(abbreviated_name="C3", type=Place.NATION) doc_dict = dict(service_area=everywhere, focus_area={ country1.abbreviated_name: everywhere, country3.abbreviated_name: everywhere }) doc = AuthenticationDocument.from_dict(self._db, doc_dict) doc.update_service_areas(library) self._db.commit() # The ServiceArea for country #2 has been removed. assert a2 not in library.service_areas assert not any(a.place == country2 for a in library.service_areas) [a1, a2, a3] = sorted([(x.type, x.place.abbreviated_name) for x in library.service_areas]) eq_(('eligibility', everywhere_place.abbreviated_name), a1) eq_(('focus', country1.abbreviated_name), a2) eq_(('focus', country3.abbreviated_name), a3)
def test_success(self): us = self._place(type=Place.NATION, abbreviated_name='US') library = self._library() s = SetCoverageAreaScript(_db=self._db) # Setting a service area with no focus area assigns that # service area to the library. args = [ "--library=%s" % library.name, '--service-area={"US": "everywhere"}' ] s.run(args) [area] = library.service_areas eq_(us, area.place) # Setting a focus area and not a service area treats 'everywhere' # as the service area. uk = self._place(type=Place.NATION, abbreviated_name='UK') args = [ "--library=%s" % library.name, '--focus-area={"UK": "everywhere"}' ] s.run(args) places = [x.place for x in library.service_areas] eq_(2, len(places)) assert uk in places assert Place.everywhere(self._db) in places # The library's former ServiceAreas have been removed. assert us not in places # If a default nation is set, you can name a single place as # your service area. ConfigurationSetting.sitewide( self._db, Configuration.DEFAULT_NATION_ABBREVIATION).value = "US" ut = self._place(type=Place.STATE, abbreviated_name='UT', parent=us) args = ["--library=%s" % library.name, '--service-area=UT'] s.run(args) [area] = library.service_areas eq_(ut, area.place)