Skip to main content
  • Home
  • Development
  • Documentation
  • Donate
  • Operational login
  • Browse the archive

swh logo
SoftwareHeritage
Software
Heritage
Archive
Features
  • Search

  • Downloads

  • Save code now

  • Add forge now

  • Help

  • cde5674
  • /
  • services
  • /
  • authn
  • /
  • test_authenticate.py
Raw File Download

To reference or cite the objects present in the Software Heritage archive, permalinks based on SoftWare Hash IDentifiers (SWHIDs) must be used.
Select below a type of object currently browsed in order to display its associated SWHID and permalink.

  • content
  • directory
content badge
swh:1:cnt:d6bd6c89c047d76f627a869be13d45983ba43ae5
directory badge
swh:1:dir:a72b764f60c497e0075d250825c01c696a00dfd5

This interface enables to generate software citations, provided that the root directory of browsed objects contains a citation.cff or codemeta.json file.
Select below a type of object currently browsed in order to generate citations for them.

  • content
  • directory
(requires biblatex-software package)
Generating citation ...
(requires biblatex-software package)
Generating citation ...
test_authenticate.py
"""
:Copyright: 2014-2025 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

from secret_type import secret

from byceps.services.authn import authn_service
from byceps.services.authn.errors import (
    UsernameUnknownError,
    UserAccountNotInitializedError,
    UserAccountSuspendedError,
    UserAccountDeletedError,
    WrongPasswordError,
)
from byceps.util.result import Err, Ok


CORRECT_PASSWORD = secret('opensesame')
IRRELEVANT_PASSWORD = secret('irrelevant-password')
WRONG_PASSWORD = secret('123456')


def test_unknown_username_is_rejected(make_user):
    actual = authn_service.authenticate('unknown-username', IRRELEVANT_PASSWORD)

    assert actual == Err(UsernameUnknownError())


def test_uninitialized_user_is_rejected(make_user):
    user = create_user(make_user, initialized=False)

    actual = authn_service.authenticate(user.screen_name, CORRECT_PASSWORD)

    assert actual == Err(UserAccountNotInitializedError())


def test_suspended_user_is_rejected(make_user):
    user = create_user(make_user, suspended=True)

    actual = authn_service.authenticate(user.screen_name, CORRECT_PASSWORD)

    assert actual == Err(UserAccountSuspendedError())


def test_deleted_user_is_rejected(make_user):
    user = create_user(make_user, deleted=True)

    actual = authn_service.authenticate(user.screen_name, CORRECT_PASSWORD)

    assert actual == Err(UserAccountDeletedError())


def test_with_wrong_password_is_rejected(make_user):
    user = create_user(make_user)

    actual = authn_service.authenticate(user.screen_name, WRONG_PASSWORD)

    assert actual == Err(WrongPasswordError())


def test_active_user_with_screen_name_and_correct_password_is_accepted(
    make_user,
):
    user = create_user(make_user)

    actual = authn_service.authenticate(user.screen_name, CORRECT_PASSWORD)

    assert actual == Ok(user)


def test_active_user_with_email_address_and_correct_password_is_accepted(
    make_user,
):
    user = create_user(make_user, email_address='ehrenmann@mail.test')

    actual = authn_service.authenticate('ehrenmann@mail.test', CORRECT_PASSWORD)

    assert actual == Ok(user)


def create_user(make_user, **kwargs):
    return make_user(password=CORRECT_PASSWORD, **kwargs)

back to top

Software Heritage — Copyright (C) 2015–2026, The Software Heritage developers. License: GNU AGPLv3+.
The source code of Software Heritage itself is available on our development forge.
The source code files archived by Software Heritage are available under their own copyright and licenses.
Terms of use: Archive access, API— Content policy— Contact— JavaScript license information— Web API