Add private support
Commit 52229 pushed by Anže Pečar

47 tests 41 passed 6 failed Duration
self = <Variable: 'account.can_add_to_starter_pack'>
context = [{'True': True, 'False': False, 'None': None}, {}, {}, {'page': 'starter_packs', 'page_title': 'Add accounts to your s...accounts': 0, 'accounts': <Page 1 of 1>, 'starter_pack': <StarterPack: StarterPack object (8)>, 'LANGUAGE_CODE': 'en'}]

    def _resolve_lookup(self, context):
        """
        Perform resolution of a real variable (i.e. not a literal) against the
        given context.
    
        As indicated by the method's name, this method is an implementation
        detail and shouldn't be called by external code. Use Variable.resolve()
        instead.
        """
        current = context
        try:  # catch-all for silent variable failures
            for bit in self.lookups:
                try:  # dictionary lookup
>                   current = current[bit]
E                   TypeError: 'Account' object is not subscriptable

.venv/lib/python3.13/site-packages/django/template/base.py:883: TypeError

During handling of the above exception, another exception occurred:

self = <starter_packs.tests.TestCreateStarterPack testMethod=test_create_starter_pack>

    def test_create_starter_pack(self):
        self.client.force_login(self.user)
        response = self.client.post(
            reverse("create_starter_pack"),
            {
                "title": "Test Starter Pack",
                "description": "This is a test starter pack",
            },
        )
        starter_pack = self.user.starterpack_set.first()
        self.assertEqual(starter_pack.created_by, self.user)
>       self.assertRedirects(response, reverse("edit_accounts_starter_pack", args=[starter_pack.slug]))

starter_packs/tests.py:67: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.13/site-packages/django/test/testcases.py:507: in assertRedirects
    redirect_response = response.client.get(
.venv/lib/python3.13/site-packages/django/test/client.py:1129: in get
    response = super().get(
.venv/lib/python3.13/site-packages/django/test/client.py:479: in get
    return self.generic(
.venv/lib/python3.13/site-packages/django/test/client.py:676: in generic
    return self.request(**r)
.venv/lib/python3.13/site-packages/django/test/client.py:1092: in request
    self.check_exception(response)
.venv/lib/python3.13/site-packages/django/test/client.py:805: in check_exception
    raise exc_value
.venv/lib/python3.13/site-packages/django/core/handlers/exception.py:55: in inner
    response = get_response(request)
.venv/lib/python3.13/site-packages/django/core/handlers/base.py:197: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
.venv/lib/python3.13/site-packages/django/contrib/auth/decorators.py:60: in _view_wrapper
    return view_func(request, *args, **kwargs)
starter_packs/views.py:188: in add_accounts_to_starter_pack
    return render(
.venv/lib/python3.13/site-packages/django/shortcuts.py:25: in render
    content = loader.render_to_string(template_name, context, request, using=using)
.venv/lib/python3.13/site-packages/django/template/loader.py:62: in render_to_string
    return template.render(context, request)
.venv/lib/python3.13/site-packages/django/template/backends/django.py:107: in render
    return self.template.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:171: in render
    return self._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:159: in render
    return compiled_parent._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:65: in render
    result = block.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:210: in render
    return template.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:173: in render
    return self._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:243: in render
    nodelist.append(node.render_annotated(context))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:320: in render
    match = condition.eval(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:886: in eval
    return self.value.resolve(context, ignore_failures=True)
.venv/lib/python3.13/site-packages/django/template/base.py:718: in resolve
    obj = self.var.resolve(context)
.venv/lib/python3.13/site-packages/django/template/base.py:850: in resolve
    value = self._resolve_lookup(context)
.venv/lib/python3.13/site-packages/django/template/base.py:893: in _resolve_lookup
    current = getattr(current, bit)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Account: cuhtAIxHlnMepFmCkaOquwJqkKIPdWBFWCfpshvSppdYZRHLXxoctDOqGWNUwmSBIyEZmeZNvYolesSFKBSplBvtwTIHfPkKMVIHCVYpSYYo...UYnrlvllHRKSzNcgfugzRmSLjtRPFPukiFyIQEhdMDJSfenzKJTipuugMufdSQZLAOtlMtJihnNjpgNNpYsMQmyOUFMkjTXVXUrMIAkwcBwVxYwLyDXvOf>

    @property
    def can_add_to_starter_pack(self):
>       if self.instance_model.private:
E       AttributeError: 'NoneType' object has no attribute 'private'

accounts/models.py:241: AttributeError
self = <Variable: 'account.can_add_to_starter_pack'>
context = [{'True': True, 'False': False, 'None': None}, {}, {}, {'page': 'starter_packs', 'page_title': 'Add accounts to your s...ccounts': 0, 'accounts': <Page 1 of 1>, 'starter_pack': <StarterPack: StarterPack object (10)>, 'LANGUAGE_CODE': 'en'}]

    def _resolve_lookup(self, context):
        """
        Perform resolution of a real variable (i.e. not a literal) against the
        given context.
    
        As indicated by the method's name, this method is an implementation
        detail and shouldn't be called by external code. Use Variable.resolve()
        instead.
        """
        current = context
        try:  # catch-all for silent variable failures
            for bit in self.lookups:
                try:  # dictionary lookup
>                   current = current[bit]
E                   TypeError: 'Account' object is not subscriptable

.venv/lib/python3.13/site-packages/django/template/base.py:883: TypeError

During handling of the above exception, another exception occurred:

self = <starter_packs.tests.TestEditStarterPackAccounts testMethod=test_edit_starter_packs>

    def test_edit_starter_packs(self):
        self.client.force_login(self.user)
>       response = self.client.get(reverse("edit_accounts_starter_pack", args=[self.starter_pack.slug]))

starter_packs/tests.py:138: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.13/site-packages/django/test/client.py:1129: in get
    response = super().get(
.venv/lib/python3.13/site-packages/django/test/client.py:479: in get
    return self.generic(
.venv/lib/python3.13/site-packages/django/test/client.py:676: in generic
    return self.request(**r)
.venv/lib/python3.13/site-packages/django/test/client.py:1092: in request
    self.check_exception(response)
.venv/lib/python3.13/site-packages/django/test/client.py:805: in check_exception
    raise exc_value
.venv/lib/python3.13/site-packages/django/core/handlers/exception.py:55: in inner
    response = get_response(request)
.venv/lib/python3.13/site-packages/django/core/handlers/base.py:197: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
.venv/lib/python3.13/site-packages/django/contrib/auth/decorators.py:60: in _view_wrapper
    return view_func(request, *args, **kwargs)
starter_packs/views.py:188: in add_accounts_to_starter_pack
    return render(
.venv/lib/python3.13/site-packages/django/shortcuts.py:25: in render
    content = loader.render_to_string(template_name, context, request, using=using)
.venv/lib/python3.13/site-packages/django/template/loader.py:62: in render_to_string
    return template.render(context, request)
.venv/lib/python3.13/site-packages/django/template/backends/django.py:107: in render
    return self.template.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:171: in render
    return self._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:159: in render
    return compiled_parent._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:65: in render
    result = block.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:210: in render
    return template.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:173: in render
    return self._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:243: in render
    nodelist.append(node.render_annotated(context))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:320: in render
    match = condition.eval(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:886: in eval
    return self.value.resolve(context, ignore_failures=True)
.venv/lib/python3.13/site-packages/django/template/base.py:718: in resolve
    obj = self.var.resolve(context)
.venv/lib/python3.13/site-packages/django/template/base.py:850: in resolve
    value = self._resolve_lookup(context)
.venv/lib/python3.13/site-packages/django/template/base.py:893: in _resolve_lookup
    current = getattr(current, bit)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Account: tkeTbMrwBOYIqeNVxmCyxspRowrgxjoLfqYiZPpQXWIQQaijaYyEgRnzmlEiuklSydSPIlWeUjXiOZBYtnbyucNYElfBWUROgHtCbbdlmsxd...MmjPVpsRpfLjrfdPdgwCNWWfdLiiKJsAKhzipbyUZyULOYMSWenqxOFMqReDQzrJyPbVeVxgPZeMZbvVGeojGijyxoQQzwLiAggPnuGdoFTrxLFKFdunTX>

    @property
    def can_add_to_starter_pack(self):
>       if self.instance_model.private:
E       AttributeError: 'NoneType' object has no attribute 'private'

accounts/models.py:241: AttributeError
self = <Variable: 'account.can_add_to_starter_pack'>
context = [{'True': True, 'False': False, 'None': None}, {}, {}, {'page': 'starter_packs', 'page_title': 'Add accounts to your s...accounts': 0, 'accounts': <Page 1 of 1>, 'starter_pack': <StarterPack: StarterPack object (9)>, 'LANGUAGE_CODE': 'en'}]

    def _resolve_lookup(self, context):
        """
        Perform resolution of a real variable (i.e. not a literal) against the
        given context.
    
        As indicated by the method's name, this method is an implementation
        detail and shouldn't be called by external code. Use Variable.resolve()
        instead.
        """
        current = context
        try:  # catch-all for silent variable failures
            for bit in self.lookups:
                try:  # dictionary lookup
>                   current = current[bit]
E                   TypeError: 'Account' object is not subscriptable

.venv/lib/python3.13/site-packages/django/template/base.py:883: TypeError

During handling of the above exception, another exception occurred:

self = <starter_packs.tests.TestEditStarterPack testMethod=test_edit_starter_pack_post>

    def test_edit_starter_pack_post(self):
        self.client.force_login(self.user)
        response = self.client.post(
            reverse("edit_starter_pack", args=[self.starter_pack.slug]),
            {
                "title": "New title",
                "description": "New description",
            },
        )
        self.starter_pack.refresh_from_db()
        self.assertEqual(self.starter_pack.title, "New title")
        self.assertEqual(self.starter_pack.description, "New description")
>       self.assertRedirects(response, reverse("edit_accounts_starter_pack", args=[self.starter_pack.slug]))

starter_packs/tests.py:114: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.venv/lib/python3.13/site-packages/django/test/testcases.py:507: in assertRedirects
    redirect_response = response.client.get(
.venv/lib/python3.13/site-packages/django/test/client.py:1129: in get
    response = super().get(
.venv/lib/python3.13/site-packages/django/test/client.py:479: in get
    return self.generic(
.venv/lib/python3.13/site-packages/django/test/client.py:676: in generic
    return self.request(**r)
.venv/lib/python3.13/site-packages/django/test/client.py:1092: in request
    self.check_exception(response)
.venv/lib/python3.13/site-packages/django/test/client.py:805: in check_exception
    raise exc_value
.venv/lib/python3.13/site-packages/django/core/handlers/exception.py:55: in inner
    response = get_response(request)
.venv/lib/python3.13/site-packages/django/core/handlers/base.py:197: in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
.venv/lib/python3.13/site-packages/django/contrib/auth/decorators.py:60: in _view_wrapper
    return view_func(request, *args, **kwargs)
starter_packs/views.py:188: in add_accounts_to_starter_pack
    return render(
.venv/lib/python3.13/site-packages/django/shortcuts.py:25: in render
    content = loader.render_to_string(template_name, context, request, using=using)
.venv/lib/python3.13/site-packages/django/template/loader.py:62: in render_to_string
    return template.render(context, request)
.venv/lib/python3.13/site-packages/django/template/backends/django.py:107: in render
    return self.template.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:171: in render
    return self._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:159: in render
    return compiled_parent._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:65: in render
    result = block.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/loader_tags.py:210: in render
    return template.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:173: in render
    return self._render(context)
.venv/lib/python3.13/site-packages/django/test/utils.py:114: in instrumented_test_render
    return self.nodelist.render(context)
.venv/lib/python3.13/site-packages/django/template/base.py:1008: in render
    return SafeString("".join([node.render_annotated(context) for node in self]))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:243: in render
    nodelist.append(node.render_annotated(context))
.venv/lib/python3.13/site-packages/django/template/base.py:969: in render_annotated
    return self.render(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:320: in render
    match = condition.eval(context)
.venv/lib/python3.13/site-packages/django/template/defaulttags.py:886: in eval
    return self.value.resolve(context, ignore_failures=True)
.venv/lib/python3.13/site-packages/django/template/base.py:718: in resolve
    obj = self.var.resolve(context)
.venv/lib/python3.13/site-packages/django/template/base.py:850: in resolve
    value = self._resolve_lookup(context)
.venv/lib/python3.13/site-packages/django/template/base.py:893: in _resolve_lookup
    current = getattr(current, bit)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Account: HqTevEcyTPWvJndJeYuFTmaHiDlkqvlMiNiJpJwXWtBBYMiHpEXyqqEFqMTganxGUmyBpwbdGYhXPQqOmgBTvuEHTskviyCtlcSdHwtYXSsw...ciwArmtoHUOoXuoUgrhMdLiHYeBCJbYBoCqhictbzpSgKtNiCTvHKmhQANBYfmpAMKADtualrpYBrVqlLzfcfzPmDLEGndqBAcviYWuIiKcDddlSArTAGF>

    @property
    def can_add_to_starter_pack(self):
>       if self.instance_model.private:
E       AttributeError: 'NoneType' object has no attribute 'private'

accounts/models.py:241: AttributeError
self = <starter_packs.tests.TestToggleStarterPackAccount testMethod=test_add_account>

    def test_add_account(self):
        account = baker.make("accounts.Account", discoverable=True)
        self.client.force_login(self.user)
        response = self.client.post(
            reverse(
                "toggle_account_to_starter_pack",
                kwargs={"starter_pack_slug": self.starter_pack.slug, "account_id": account.id},
            )
        )
>       self.assertEqual(response.status_code, 200)
E       AssertionError: 404 != 200

starter_packs/tests.py:193: AssertionError
self = <starter_packs.tests.TestToggleStarterPackAccount testMethod=test_remove_account>

    def test_remove_account(self):
        account = baker.make("accounts.Account", discoverable=True)
        self.client.force_login(self.user)
        baker.make("starter_packs.StarterPackAccount", account=account, starter_pack=self.starter_pack)
        response = self.client.post(
            reverse(
                "toggle_account_to_starter_pack",
                kwargs={"starter_pack_slug": self.starter_pack.slug, "account_id": account.id},
            )
        )
>       self.assertEqual(response.status_code, 200)
E       AssertionError: 404 != 200

starter_packs/tests.py:208: AssertionError
self = <starter_packs.tests.TestToggleStarterPackAccount testMethod=test_toggle_after_limit>

    def test_toggle_after_limit(self):
        account = baker.make("accounts.Account", discoverable=True)
        self.client.force_login(self.user)
        # baker.make("starter_packs.StarterPackAccount", starter_pack=self.starter_pack, account=account)
        baker.make("starter_packs.StarterPackAccount", starter_pack=self.starter_pack, _quantity=150)
    
        self.assertEqual(self.starter_pack.starterpackaccount_set.count(), 150)
        response = self.client.post(
            reverse(
                "toggle_account_to_starter_pack",
                kwargs={"starter_pack_slug": self.starter_pack.slug, "account_id": account.id},
            )
        )
>       self.assertEqual(response.status_code, 200)
E       AssertionError: 404 != 200

starter_packs/tests.py:226: AssertionError