s2t2/gspread-models-py

View on GitHub
conftest.py

Summary

Maintainability
A
0 mins
Test Coverage

import pytest
import os
from time import sleep

from dotenv import load_dotenv

from google.oauth2 import service_account
from gspread_models.service import SpreadsheetService, GOOGLE_CREDENTIALS_FILEPATH
from gspread_models.base import BaseModel


load_dotenv()

# an example sheet, used for testing purposes:
GOOGLE_SHEETS_TEST_DOCUMENT_ID= os.getenv("GOOGLE_SHEETS_TEST_DOCUMENT_ID")

# number of seconds to sleep between tests (helps manage Google API rate limit):
TEST_SLEEP = int(os.getenv("TEST_SLEEP", default="3")) # maybe not necessary? / not used in model_context

# for skipping tests on CI:
CI_ENV = bool(os.getenv("CI", default="false").lower() == "true")
#CI_SKIP_MESSAGE = "taking a lighter touch to testing on the CI server, to reduce API usage and prevent rate limits"


@pytest.fixture()
def creds():
    """Credentials object, using the service account JSON file"""
    # https://googleapis.dev/python/google-auth/latest/user-guide.html#obtaining-credentials
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
    creds = service_account.Credentials.from_service_account_file(GOOGLE_CREDENTIALS_FILEPATH)
    creds = creds.with_scopes(SCOPES)
    return creds


@pytest.fixture()
def service():
    """Spreadsheet service connected to the test document. Sleeps to avoid rate limits."""
    ss = SpreadsheetService(document_id=GOOGLE_SHEETS_TEST_DOCUMENT_ID)
    assert ss.document_id == GOOGLE_SHEETS_TEST_DOCUMENT_ID

    yield ss

    print("SLEEPING...")
    sleep(TEST_SLEEP)


@pytest.fixture()
def model_context(service):
    """Use this fixture and subsequent model calls will be made against the test database."""
    #BaseModel.set_document_id(GOOGLE_SHEETS_TEST_DOCUMENT_ID)
    BaseModel.service = service
    assert BaseModel.service.document_id == GOOGLE_SHEETS_TEST_DOCUMENT_ID

    yield "Using test document!"

    #print("SLEEPING...")
    #sleep(TEST_SLEEP)