{"id":15008157,"url":"https://github.com/ganchrowscientific/gs-lua-unit","last_synced_at":"2026-02-08T21:08:19.486Z","repository":{"id":57256313,"uuid":"121812396","full_name":"GanchrowScientific/gs-lua-unit","owner":"GanchrowScientific","description":"\"Ganchrow Scientific Embedded Lua Unit Testing Framework","archived":false,"fork":false,"pushed_at":"2023-08-16T20:46:52.000Z","size":1596,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-29T18:51:00.694Z","etag":null,"topics":["lua","redis","test","testing","unit"],"latest_commit_sha":null,"homepage":null,"language":"Lua","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GanchrowScientific.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}},"created_at":"2018-02-16T23:38:51.000Z","updated_at":"2022-03-02T19:57:25.000Z","dependencies_parsed_at":"2024-10-12T08:21:10.726Z","dependency_job_id":"ac4b66f6-4953-409c-a61f-1eedd3a18e3c","html_url":"https://github.com/GanchrowScientific/gs-lua-unit","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/GanchrowScientific/gs-lua-unit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GanchrowScientific%2Fgs-lua-unit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GanchrowScientific%2Fgs-lua-unit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GanchrowScientific%2Fgs-lua-unit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GanchrowScientific%2Fgs-lua-unit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GanchrowScientific","download_url":"https://codeload.github.com/GanchrowScientific/gs-lua-unit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GanchrowScientific%2Fgs-lua-unit/sbom","scorecard":{"id":54695,"data":{"date":"2025-08-11","repo":{"name":"github.com/GanchrowScientific/gs-lua-unit","commit":"65fdcecd18cd84424da4c8caa5399e8a6c41d952"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Code-Review","score":9,"reason":"Found 28/30 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-15T00:27:15.220Z","repository_id":57256313,"created_at":"2025-08-15T00:27:15.220Z","updated_at":"2025-08-15T00:27:15.220Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270771584,"owners_count":24642338,"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-08-16T02:00:11.002Z","response_time":91,"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":["lua","redis","test","testing","unit"],"created_at":"2024-09-24T19:15:25.449Z","updated_at":"2026-02-08T21:08:19.457Z","avatar_url":"https://github.com/GanchrowScientific.png","language":"Lua","readme":"# Create lua unit tests\n\n```lua\n-- test.lua\n\ndofile('./node_modules/gs-lua-unit/lua-src/common.lua')\n-- lua setup stuff\n\nrunTests(generateTests({\n  foo = {{\n    tag = 'Testing file foo',\n    doTest = function(fooModule)\n      return fooModule.doStuff()\n    end,\n    expect = function(resultFromDoTest, expector, fooModule)\n      -- expector has all sorts of goodies\n      expector:expectStrictEqual(resultFromDoTest.result1, 'fooResult1')\n      expector:expectTruthy(resultFromDoTest.result2)\n      expector:expectFalsy(resultFromDoTest.result3)\n      expector:expectDeepEqual(resultFromDoTest.resultObj, {foo = 1, bar = 2})\n      return true -- must return true here\n      -- its not required to use the expector, you can do stuff like\n      -- return result and result[1].foo == 'bar'\n      -- but the expector provides detailed assertion failures\n    end\n  }, {\n    -- more tests\n  }},\n\n  bar = {{\n    -- more tests\n  }}\n})\n```\n\nAnd then\n\n```bash\nlua /path/to/test.lua\n```\n\n# What are foo and bar\n\n`foo = ...` and `bar = ...` point to files that exist in a directory with lua scripts named *foo* and *bar*.\n\nBy default, **gs-lua-unit** looks in the directory \"target/test_scripts/\", but this directory can also be specified with the third argument to `runTests`.\n\n# What about [Redis](https://redis.io/)?\n\nA redis.call method is provided for you, and works on an **active** redis.\n\n**gs-lua-unit** looks for redis in a \"redis.yaml\" of the current working directory.\n\n```yaml\n# redis.yaml\nmockRedis:\n host: localhost\n port: 6379\n```\n\nRedis location can also be passed as the second argument to `runTests` above\n\n```lua\nrunTests(generateTests({ ... }), redisConfig)\n```\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fganchrowscientific%2Fgs-lua-unit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fganchrowscientific%2Fgs-lua-unit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fganchrowscientific%2Fgs-lua-unit/lists"}