{"id":18116960,"url":"https://github.com/eliflores/mignonnesaurus-blog","last_synced_at":"2025-10-25T02:23:41.524Z","repository":{"id":32139502,"uuid":"35712266","full_name":"eliflores/mignonnesaurus-blog","owner":"eliflores","description":"A blog written in Django and based on the Django Girls Tutorial Blog.","archived":false,"fork":false,"pushed_at":"2025-10-16T18:08:49.000Z","size":1531,"stargazers_count":5,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-17T20:54:18.486Z","etag":null,"topics":["community","django","djangogirls","python","tutorial"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-sa-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eliflores.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-05-16T06:10:08.000Z","updated_at":"2025-10-16T18:08:52.000Z","dependencies_parsed_at":"2023-10-03T18:01:14.909Z","dependency_job_id":"b2942510-063f-4a50-aeb8-e27ee1ec829b","html_url":"https://github.com/eliflores/mignonnesaurus-blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eliflores/mignonnesaurus-blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliflores%2Fmignonnesaurus-blog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliflores%2Fmignonnesaurus-blog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliflores%2Fmignonnesaurus-blog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliflores%2Fmignonnesaurus-blog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eliflores","download_url":"https://codeload.github.com/eliflores/mignonnesaurus-blog/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliflores%2Fmignonnesaurus-blog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280893769,"owners_count":26409315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-25T02:00:06.499Z","response_time":81,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["community","django","djangogirls","python","tutorial"],"created_at":"2024-11-01T04:42:02.048Z","updated_at":"2025-10-25T02:23:41.519Z","avatar_url":"https://github.com/eliflores.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mignonnesaurus Blog\n\n[![CircleCI](https://circleci.com/gh/eliflores/mignonnesaurus-blog.svg?style=svg)](https://circleci.com/gh/eliflores/mignonnesaurus-blog)\n[![Code Coverage](https://qlty.sh/gh/eliflores/projects/mignonnesaurus-blog/coverage.svg)](https://qlty.sh/gh/eliflores/projects/mignonnesaurus-blog)\n[![Maintainability](https://qlty.sh/gh/eliflores/projects/mignonnesaurus-blog/maintainability.svg)](https://qlty.sh/gh/eliflores/projects/mignonnesaurus-blog)\n[![License: CC BY 4.0](https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by/4.0/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits\u0026logoColor=white)](https://conventionalcommits.org)\n\n\n- [Introduction](#Introduction)\n- [How to run the project locally?](#How-to-run-the-project-locally)\n- [How to run tests?](#How-to-run-tests)\n  - [Test suite](#Test-suite)\n  - [Single test case(s)](#Single-test-cases)\n  - [Modify the verbosity level](#Modify-the-verbosity-level)\n  - [Code coverage](#Code-coverage)\n    - [Coverage report](#Coverage-report)\n  - [E2E Tests](#E2E-Tests)\n  - [On a local machine :computer:](#On-a-local-machine-computer)\n    - [Pre-requirements](#Pre-requirements)\n    - [Running E2E Tests](#Running-E2E-Tests)\n  - [On a remote machine :cloud:](#On-a-remote-machine-cloud)\n    - [Pre-requirements](#Pre-requirements-1)\n    - [Running E2E Tests](#Running-E2E-Tests-1)\n- [Continuous Integration](#Continuous-Integration)\n\n## Introduction\n\nI :yellow_heart: the [Django Girls Tutorial](https://tutorial.djangogirls.org/en/). After [following it](https://github.com/mignonnesaurus/my-first-blog), I continued the fun by:\n* Adding Tests \n* Setting up Continuous Integration with [circleci](https://circleci.com/)\n* Setting up [Code Climate](https://codeclimate.com/)\n\n## Getting started\n\n### How to run the project locally?\n\n1. Install the version of Python the [.tool-versions](.tool-versions) file.\n  * You may want to use [asdf](https://asdf-vm.com/) for this purpose.\n\n2. Make sure you have [GNU Make](https://www.gnu.org/software/make/) installed on your machine.\n  * A [Makefile](Makefile) was added to the project to simplify some tasks.\n\n3. The project uses [pipenv](https://github.com/pypa/pipenv) to manage the Python dependencies and facilitate the \n   workflow when working with a virtualenv. You'll need to [install pipenv](https://github.com/pypa/pipenv#installation) \n   before getting started:\n```bash\nbrew install pipenv\n```\n\n3. Setup dev environment: \n```bash\nmake dev_setup\n```\n\n4. Make sure things are healthy by running the tests: \n```bash\nmake test\n```\n\n5. Start the server:\n```bash\nmake runserver\n```\n\n## How to run tests?\n\n### Test suite\n\nAll the tests that are run as part of CI are in the [tests](tests) folder, and you can run them locally with:\n\n```bash\npython manage.py test tests\n```\n\nℹ️ Additionally, you can run: `make test`\n\nThe execution includes _E2E_ Functional Tests that run on Firefox in headless mode. \n\n_E2E_ / _UI_ tests that do not run in headless mode, can be run separately, see the [E2E Tests](#e2e-tests) section.\n\n### Single test case(s)\n\nYou can pass the module or test case:\n\n```bash\npython manage.py test \u003cmodule_pattern\u003e \n```\n\nFor example, to run all the tests in the `test_models` module:\n\n```bash\npython manage.py test tests.test_models\n```\n\nAnd you can also use the `--pattern` or `-p` argument. For example:\n\n```bash\npython manage.py test --pattern=\"*_forms.py\"\n```\n\n```bash\npython manage.py test -p \"*_forms.py\"\n```\n\n### Modify the verbosity level \n\nYou can get more details about the test execution by passing the argument `--verbosity` or `-v`. For the value you can choose from: `0, 1, 2, 3`.\n\nFor example, to pass verbosity of 2: \n```bash\npython manage.py test tests -v 2\n```\n\n### Code coverage\n\n```bash\ncoverage run manage.py test tests\n```\n\n#### Coverage report\n\n```bash\ncoverage html -d coverage-report\n```\n\n### E2E Tests \n\n:mag_right: It is also possible to run a single E2E test by using the options described [here](#single-test-cases).\n\n### On a local machine :computer:\n\n#### Running E2E Tests \n\nE2E Tests that do not run in headless mode are currently run separately from the main [test suite](#how-to-run-tests) \nand can be run with:\n\n```bash\npython manage.py test e2e.local\n```\n\n#### Troubleshooting E2E Tests\n\nE2E tests by default run in _headless_ mode, this means that if you want to \ntroubleshoot via the browser and the driver doing its magic, you will need \nto modify the test you would like to troubleshoot and change:\n\n```python\nfirefox_options.headless = True\n```\n\nto \n\n```python\nfirefox_options.headless = False\n```\n\n### On a remote machine :cloud:\n\nRemote E2E Tests - tests that run _on the cloud_ - are setup to run on [Sauce Labs](https://saucelabs.com/) :zap:.\n\n#### Pre-requirements\n\n* A _username_ and _API Key_ is needed to run the tests on the Sauce Labs Testing Cloud. \n\n#### Running E2E Tests \n\nTests that run on the cloud can be run with:\n\n```bash\npython manage.py test e2e.remote\n```\n\n### Demos\n\nA visual demo of the blog, implemented with [SeleniumBase](https://pypi.org/project/seleniumbase/) can be run with:\n\n```bash\nsh demo.sh\n```\n\nℹ️ Make sure that your development server is already started, before running the demo.\n\n#### Pre-requirements\n\n* Install [geckodriver](https://github.com/mozilla/geckodriver) - The [Web Driver](https://developer.mozilla.org/en-US/docs/Web/WebDriver) for Firefox.\n\n## Continuous Integration\n\nContinuous Integration (CI) is managed with the help of [CircleCI](https://app.circleci.com/pipelines/github/eliflores/mignonnesaurus-blog).\n\nEvery time a PR is opened all tests inside [tests](tests) are run. Passing tests are required to merge a PR to master.\n\n---\n[![CC BY-SA 4.0][cc-by-sa-shield]][cc-by-sa]\n\nThis work is licensed under a\n[Creative Commons Attribution-ShareAlike 4.0 International License][cc-by-sa].\n\nThe tutorial that was followed for the creation of this blog is attributed to [Django Girls](https://djangogirls.org/) and it can be found [here](https://tutorial.djangogirls.org/).\n\n[![CC BY-SA 4.0][cc-by-sa-image]][cc-by-sa]\n\n[cc-by-sa]: http://creativecommons.org/licenses/by-sa/4.0/\n[cc-by-sa-image]: https://licensebuttons.net/l/by-sa/4.0/88x31.png\n[cc-by-sa-shield]: https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliflores%2Fmignonnesaurus-blog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feliflores%2Fmignonnesaurus-blog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliflores%2Fmignonnesaurus-blog/lists"}