1. 06 Jun, 2021 4 commits
    • Kevin Morris's avatar
      add case [in]sensitivity tests + add OfficialProvider model · 1874e821
      Kevin Morris authored
      `ci` in this context means "Case Insensitive".
      `cs` in this context means "Case Sensitive".
      New models created:
          - OfficialProvider
            This was required to write a test for checking that
            OfficialProviders behaves as we expect, which was the starter
            for the original aurblup bug.
      New tests created:
          - test_official_provider
      Modified tests:
          - test_package_base: add ci test
          - test_package: add ci test
          - test_session: add cs test
          - test_ssh_pub_key: add cs test
      Signed-off-by: Kevin Morris's avatarKevin Morris <kevr@0cost.org>
    • Kevin Morris's avatar
      use mysql backend in config.dev · aecb6494
      Kevin Morris authored
      First off: This commit changes the default development database
      backend to mysql. sqlite, however, is still completely supported
      with the caveat that a user must now modify config.dev to use
      the sqlite backend.
      While looking into this, it was discovered that our SQLAlchemy
      backend for mysql (mysql-connector) completely broke model
      attributes when we switched to utf8mb4_bin (binary) -- it does
      not correct the correct conversion to and from binary utf8mb4.
      The new, replacement dependency mysqlclient does. mysqlclient
      is also recommended in SQLAlchemy documentation as the "best"
      one available.
      The mysqlclient backend uses a different exception flow then
      sqlite, and so tests expecting IntegrityError has to be modified
      to expect OperationalError from sqlalchemy.exc.
      So, for each model that we define, check keys that can't be
      NULL and raise sqlalchemy.exc.IntegrityError if we have to.
      This way we keep our exceptions uniform.
      Signed-off-by: Kevin Morris's avatarKevin Morris <kevr@0cost.org>
    • Kevin Morris's avatar
      Sanitize and modernize pytests · 38dc2bb9
      Kevin Morris authored
      Some of these tests were written before some of our convenient
      tooling existed. Additionally, some of the tests were not
      cooperating with PEP-8 guidelines or isorted.
      This commit does the following:
          - Replaces all calls to make_(user|session) with
            aurweb.db.create(Model, ...).
          - Replace calls to session.add(...) + session.commit() with
          - Removes the majority of calls to (session|aurweb.db).delete(...).
          - Replaces session.query calls with aurweb.db.query.
          - Initializes all mutable globals in pytest fixture setup().
          - Makes mutable global declarations more concise:
            `var1, var2 = None, None` -> `var1 = var2 = None`
          - Defines a warning exclusion for test/test_ssh_pub_key.py.
          - Removes the aurweb.testing.models module.
          - Removes some useless pytest.fixture yielding.
      As of this commit, developers should use the following guidelines
      when writing tests:
          - Always use aurweb.db.(create|delete|query) for database
            operations, where possible.
          - Always define mutable globals in the style: `var1 = var2 = None`.
          - `yield` the most dependent model in pytest setup fixture **iff**
            you must delete records after test runs to maintain database
            integrity. Example: test/test_account_type.py.
      This all makes the test code look and behave much cleaner.
      Previously, aurweb.testing.setup_test_db was buggy and leaving
      objects around in SQLAlchemy's IdentityMap.
      Signed-off-by: Kevin Morris's avatarKevin Morris <kevr@0cost.org>
    • Kevin Morris's avatar
      add aurweb.models.session.Session ORM database object · 1922e538
      Kevin Morris authored
      + Added aurweb.util module.
          - Added make_random_string function.
      + Added aurweb.db.make_random_value function.
          - Takes a model and a column and introspects them to figure out the
            proper column length to create a random string for; then creates
            a unique string for that column.
      Signed-off-by: Kevin Morris's avatarKevin Morris <kevr@0cost.org>