umap/umap/tests/base.py
Yohan Boniface fa090b89df Store DataLayer's settings in DB
This allows to known the full datalayer behaviour without needing
to load all the data, including the zoom from and to (new settings),
but also the color for example.

This will help also understanding datalayers usage and making
stats.

But no data migration is provided, it's retrocompatible (data
migration in OSM FR servers would be huge, so let's see if it's
really needed).
2023-08-20 09:48:01 +02:00

100 lines
3 KiB
Python

import json
import factory
from django.contrib.auth import get_user_model
from django.urls import reverse
from umap.forms import DEFAULT_CENTER
from umap.models import DataLayer, Licence, Map, TileLayer
User = get_user_model()
class LicenceFactory(factory.django.DjangoModelFactory):
name = "WTFPL"
class Meta:
model = Licence
class TileLayerFactory(factory.django.DjangoModelFactory):
name = "Test zoom layer"
url_template = "http://{s}.test.org/{z}/{x}/{y}.png"
attribution = "Test layer attribution"
class Meta:
model = TileLayer
class UserFactory(factory.django.DjangoModelFactory):
username = "Joe"
email = factory.LazyAttribute(
lambda a: "{0}@example.com".format(a.username).lower()
)
password = factory.PostGenerationMethodCall("set_password", "123123")
class Meta:
model = User
class MapFactory(factory.django.DjangoModelFactory):
name = "test map"
slug = "test-map"
center = DEFAULT_CENTER
settings = {
"geometry": {
"coordinates": [13.447265624999998, 48.94415123418794],
"type": "Point",
},
"properties": {
"datalayersControl": True,
"description": "Which is just the Danube, at the end",
"displayCaptionOnLoad": False,
"displayDataBrowserOnLoad": False,
"displayPopupFooter": False,
"licence": "",
"miniMap": False,
"moreControl": True,
"name": "Cruising on the Donau",
"scaleControl": True,
"tilelayer": {
"attribution": "\xa9 OSM Contributors",
"maxZoom": 18,
"minZoom": 0,
"url_template": "http://{s}.osm.fr/{z}/{x}/{y}.png",
},
"tilelayersControl": True,
"zoom": 7,
"zoomControl": True,
},
"type": "Feature",
}
licence = factory.SubFactory(LicenceFactory)
owner = factory.SubFactory(UserFactory)
class Meta:
model = Map
class DataLayerFactory(factory.django.DjangoModelFactory):
map = factory.SubFactory(MapFactory)
name = "test datalayer"
description = "test description"
display_on_load = True
settings = {"displayOnLoad": True, "browsable": True, name: "test datalayer"}
geojson = factory.django.FileField(
data="""{"type":"FeatureCollection","features":[{"type":"Feature","geometry":{"type":"Point","coordinates":[13.68896484375,48.55297816440071]},"properties":{"_umap_options":{"color":"DarkCyan","iconClass":"Ball"},"name":"Here","description":"Da place anonymous again 755"}}],"_umap_options":{"displayOnLoad":true,"name":"Donau","id":926}}"""
) # noqa
class Meta:
model = DataLayer
def login_required(response):
assert response.status_code == 200
j = json.loads(response.content.decode())
assert "login_required" in j
redirect_url = reverse("login")
assert j["login_required"] == redirect_url
return True