Skip to content

Commit

Permalink
#21 Feature/language country queries (#4)
Browse files Browse the repository at this point in the history
* adding countries query
* adding language queries for 
    - default lang
    - current lang
    - all langs
* Improved languages and added queries including direction, codes and translated values

---------

Co-authored-by: Sascha Dobbelaere <sascha@tweave.tech>
  • Loading branch information
sdobbelaere and Sascha Dobbelaere committed Nov 28, 2023
1 parent dfdb8a7 commit a01a64d
Show file tree
Hide file tree
Showing 12 changed files with 169 additions and 4 deletions.
9 changes: 6 additions & 3 deletions OneSila/OneSila/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
from strawberry_django.optimizer import DjangoOptimizerExtension

from contacts.schema import ContactsQuery, ContactsMutation, ContactsSubscription
from core.schema.countries import CountryQuery
from core.schema.languages import LanguageQuery
from core.schema.multi_tenant import MultiTenantQuery, MultiTenantMutation, MultiTenantSubscription
from currencies.schema import CurrenciesQuery, CurrenciesMutation, CurrenciesSubscription
from customs.schema import CustomsQuery, CustomsMutation, CustomsSubscription
Expand All @@ -28,9 +30,10 @@
#

@strawberry.type
class Query(ContactsQuery, CurrenciesQuery, CustomsQuery, EanCodesQuery, InventoryQuery,
MediaQuery, MultiTenantQuery, OrdersQuery, ProductsQuery, PropertiesQuery,
PurchasingQuery, SalesPricesQuery, TaxesQuery, UnitsQuery):
class Query(ContactsQuery, CurrenciesQuery, CustomsQuery, CountryQuery, EanCodesQuery,
InventoryQuery, LanguageQuery, MediaQuery, MultiTenantQuery, OrdersQuery,
ProductsQuery, PropertiesQuery, PurchasingQuery, SalesPricesQuery, TaxesQuery,
UnitsQuery):
pass


Expand Down
4 changes: 3 additions & 1 deletion OneSila/OneSila/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,12 @@
# Internationalization of the interfaces
# https://docs.djangoproject.com/en/4.2/topics/i18n/

LANGUAGE_CODE = 'en-gb'
LANGUAGE_CODE = 'en'
LANGUAGES = (
('nl', _('Nederlands')),
('en', _('English')),
('en-gb', _('English GB')),
('he', _("Hebrew")),
)


Expand Down
1 change: 1 addition & 0 deletions OneSila/core/schema/core/types/types.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.contrib.auth import get_user_model

from strawberry import relay, auto
from strawberry import type as strawberry_type
from strawberry_django import type

from typing import List
Expand Down
1 change: 1 addition & 0 deletions OneSila/core/schema/countries/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .queries import CountryQuery
20 changes: 20 additions & 0 deletions OneSila/core/schema/countries/queries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from strawberry_django import auth, field

from core.schema.core.helpers import get_multi_tenant_company
from core.schema.multi_tenant.types.types import MultiTenantUserType, MultiTenantCompanyType
from core.schema.core.queries import node, connection, ListConnectionWithTotalCount, \
type, field, default_extensions, Info

from typing import List

from core.countries import COUNTRY_CHOICES
from core.schema.countries.types.types import CountryType


def get_countries() -> List[CountryType]:
return [CountryType(code=code, name=name) for code, name in COUNTRY_CHOICES]


@type(name="Query")
class CountryQuery:
countries: List[CountryType] = field(resolver=get_countries)
Empty file.
10 changes: 10 additions & 0 deletions OneSila/core/schema/countries/types/types.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.contrib.auth import get_user_model

from core.schema.core.types.types import type, relay, auto, strawberry_type
from core.schema.core.mixins import GetQuerysetMultiTenantMixin


@strawberry_type
class CountryType:
code: str
name: str
1 change: 1 addition & 0 deletions OneSila/core/schema/languages/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from .queries import LanguageQuery
41 changes: 41 additions & 0 deletions OneSila/core/schema/languages/queries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from strawberry_django import auth, field

from core.schema.core.helpers import get_multi_tenant_company
from core.schema.multi_tenant.types.types import MultiTenantUserType, MultiTenantCompanyType
from core.schema.core.queries import node, connection, ListConnectionWithTotalCount, \
type, field, default_extensions, Info

from typing import List

from core.countries import COUNTRY_CHOICES
from core.schema.languages.types.types import LanguageType
from core.schema.core.helpers import get_current_user
from django.conf import settings
from django.utils.translation import activate, get_language_info, deactivate


def get_languages(info) -> List[LanguageType]:
user = get_current_user(info)
activate(user.language)
languages = [LanguageType(**get_language_info(code)) for code, _ in settings.LANGUAGES]
deactivate()
return languages


def get_default_language() -> LanguageType:
return LanguageType(**get_language_info(settings.LANGUAGE_CODE))


def get_current_user_language(info) -> LanguageType:
user = get_current_user(info)
activate(user.language)
lang = LanguageType(**get_language_info(user.language))
deactivate()
return lang


@type(name="Query")
class LanguageQuery:
default_language: LanguageType = field(resolver=get_default_language)
current_user_language: LanguageType = field(resolver=get_current_user_language)
languages: List[LanguageType] = field(resolver=get_languages)
Empty file.
15 changes: 15 additions & 0 deletions OneSila/core/schema/languages/types/types.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django.contrib.auth import get_user_model

from core.schema.core.types.types import type, relay, auto, strawberry_type
from core.schema.core.mixins import GetQuerysetMultiTenantMixin

from typing import List


@strawberry_type
class LanguageType:
bidi: bool
code: str
name: str
name_local: str
name_translated: str
71 changes: 71 additions & 0 deletions OneSila/core/tests/tests_schemas/tests_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,74 @@ def stawberry_test_client(self, **kwargs):
test_client = TestClient('/graphql/')
with test_client.login(self.user):
return test_client.query(**kwargs)


class TestCountryQuery(TransactionTestCaseMixin, TransactionTestCase):
def test_countries(self):
query = """
query countries{
countries{
code
name
}
}
"""

resp = self.stawberry_test_client(
query=query)

self.assertTrue(resp.errors is None)
self.assertTrue(resp.data is not None)


class TestLanguageQuery(TransactionTestCaseMixin, TransactionTestCase):
def test_languages(self):
query = """
query languages{
languages{
code
name
nameLocal
nameTranslated
}
}
"""

resp = self.stawberry_test_client(
query=query)

self.assertTrue(resp.errors is None)
self.assertTrue(resp.data is not None)

def test_default_language(self):
query = """
query defaultLanguage{
defaultLanguage{
code
name
bidi
}
}
"""

resp = self.stawberry_test_client(
query=query)

self.assertTrue(resp.errors is None)
self.assertTrue(resp.data is not None)

def test_current_lang(self):
query = """
query currentUserLanguage{
currentUserLanguage{
code
name
bidi
}
}
"""
resp = self.stawberry_test_client(
query=query)

self.assertTrue(resp.errors is None)
self.assertTrue(resp.data is not None)

0 comments on commit a01a64d

Please sign in to comment.