diff options
| author | Nicolas Graves <ngraves@ngraves.fr> | 2025-10-05 19:25:49 +0200 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2025-10-08 10:57:00 +0200 |
| commit | 3fa75fd1524e52cabe82bc326048fcdc2eca6c6b (patch) | |
| tree | 7d994a859a9dbede5a95f4738be79c2b8447f4f7 /tests/import | |
| parent | fa5ae48f055c7952dea01f7d2a29d9f31ff3eb13 (diff) | |
import: gem: Move tests to tests/import/gem.scm.
Follow-up forgotten in 94df3e6f28e.
* tests/gem.scm: Move to tests/import/gem.scm.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Diffstat (limited to 'tests/import')
| -rw-r--r-- | tests/import/gem.scm | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/tests/import/gem.scm b/tests/import/gem.scm new file mode 100644 index 00000000000..beee1508756 --- /dev/null +++ b/tests/import/gem.scm @@ -0,0 +1,309 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2015 David Thompson <davet@gnu.org> +;;; Copyright © 2016 Ricardo Wurmus <rekado@elephly.net> +;;; Copyright © 2018 Oleg Pykhalov <go.wigust@gmail.com> +;;; Copyright © 2021 Sarah Morgensen <iskarian@mgsn.dev> +;;; Copyright © 2022 Taiju HIGASHI <higashi@taiju.info> +;;; Copyright © 2023 Ludovic Courtès <ludo@gnu.org> +;;; +;;; This file is part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. + +(define-module (test-gem) + #:use-module (guix import gem) + #:use-module (guix upstream) + #:use-module ((guix download) #:select (url-fetch)) + #:use-module ((guix build-system ruby) #:select (rubygems-uri)) + #:use-module (guix base32) + #:use-module (gcrypt hash) + #:use-module (guix tests) + #:use-module ((guix build utils) #:select (delete-file-recursively)) + #:use-module (srfi srfi-64) + #:use-module (ice-9 match)) + +(define test-foo-json + "{ + \"name\": \"foo\", + \"version\": \"1.0.0\", + \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\", + \"info\": \"A cool gem\", + \"homepage_uri\": \"https://example.com\", + \"dependencies\": { + \"runtime\": [ + { \"name\": \"bundler\" }, + { \"name\": \"bar\" } + ] + }, + \"licenses\": [\"MIT\", \"Apache 2.0\"] +}") + +(define test-foo-versions-json + "[{\"authors\": \" Maxim \", + \"built_at\": \"2012-10-24T00:00:00.000Z\", + \"created_at\": \"2012-11-03T07:41:49.007Z\", + \"description\": \"test gem\", + \"downloads_count\" :9195, + \"metadata\": {\"homepage_uri\":\"\"}, + \"number\": \"1.0.0\", + \"summary\": \"foo!!!\", + \"platform\": \"ruby\", + \"rubygems_version\": \"\u003e= 0\", + \"ruby_version\": null, + \"priceless\": false, + \"licenses\": null, + \"requirements\": null, + \"sha\": \"523009a5b977f79c8eaa79b521e416f26482bc4fbbcc04bd08580696e303a715\", + \"spec_sha\": \"c7cf42bac0d01eb12b68294d1cdb4e20e7cb222ca958ad70ed1e9a686b551819\" +}]") + +(define test-foo-v2-json + "{ + \"name\": \"foo\", + \"version\": \"2.0.0\", + \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\", + \"info\": \"A cool gem\", + \"homepage_uri\": \"https://example.com\", + \"dependencies\": { + \"runtime\": [ + { \"name\": \"bundler\" }, + { \"name\": \"bar\" } + ] + }, + \"licenses\": [\"MIT\", \"Apache 2.0\"] +}") + +(define test-bar-json + "{ + \"name\": \"bar\", + \"version\": \"1.0.0\", + \"sha\": \"f3676eafca9987cb5fe263df1edf2538bf6dafc712b30e17be3543a9680547a8\", + \"info\": \"Another cool gem\", + \"homepage_uri\": \"https://example.com\", + \"dependencies\": { + \"runtime\": [ + { \"name\": \"bundler\" } + ] + }, + \"licenses\": null +}") + +(define test-bundler-json + "{ + \"name\": \"bundler\", + \"version\": \"1.14.2\", + \"sha\": \"3bb53e03db0a8008161eb4c816ccd317120d3c415ba6fee6f90bbc7f7eec8690\", + \"info\": \"Ruby gem bundler\", + \"homepage_uri\": \"https://bundler.io/\", + \"dependencies\": { + \"runtime\": [] + }, + \"licenses\": [\"MIT\"] +}") + +(test-begin "gem") + +(test-assert "gem->guix-package" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://rubygems.org/api/v1/gems/foo.json" + (values (open-input-string test-foo-json) + (string-length test-foo-json))) + (_ (error "Unexpected URL: " url))))) + (match (gem->guix-package "foo") + (`(package + (name "ruby-foo") + (version "1.0.0") + (source (origin + (method url-fetch) + (uri (rubygems-uri "foo" version)) + (sha256 + (base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + (build-system ruby-build-system) + (propagated-inputs (list bundler ruby-bar)) + (synopsis "A cool gem") + (description "This package provides a cool gem.") + (home-page "https://example.com") + (license (list license:expat license:asl2.0))) + #t) + (x + (pk 'fail x #f))))) + +(test-assert "gem->guix-package with a specific version" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://rubygems.org/api/v2/rubygems/foo/versions/2.0.0.json" + (values (open-input-string test-foo-v2-json) + (string-length test-foo-v2-json))) + (_ (error "Unexpected URL: " url))))) + (match (gem->guix-package "foo" #:version "2.0.0") + (`(package + (name "ruby-foo") + (version "2.0.0") + (source (origin + (method url-fetch) + (uri (rubygems-uri "foo" version)) + (sha256 + (base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + (build-system ruby-build-system) + (propagated-inputs (list bundler ruby-bar)) + (synopsis "A cool gem") + (description "This package provides a cool gem.") + (home-page "https://example.com") + (license (list license:expat license:asl2.0))) + #t) + (x + (pk 'fail x #f))))) + +(test-assert "gem-recursive-import" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://rubygems.org/api/v1/gems/foo.json" + (values (open-input-string test-foo-json) + (string-length test-foo-json))) + ("https://rubygems.org/api/v1/gems/bar.json" + (values (open-input-string test-bar-json) + (string-length test-bar-json))) + ("https://rubygems.org/api/v1/gems/bundler.json" + (values (open-input-string test-bundler-json) + (string-length test-bundler-json))) + (_ (error "Unexpected URL: " url))))) + (match (gem-recursive-import "foo") + (`((package + (name "ruby-bar") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "bar" version)) + (sha256 + (base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + (build-system ruby-build-system) + (propagated-inputs (list bundler)) + (synopsis "Another cool gem") + (description "Another cool gem.") + (home-page "https://example.com") + (license #f)) ;no licensing info + (package + (name "ruby-foo") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "foo" version)) + (sha256 + (base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + (build-system ruby-build-system) + (propagated-inputs (list bundler ruby-bar)) + (synopsis "A cool gem") + (description "This package provides a cool gem.") + (home-page "https://example.com") + (license (list license:expat license:asl2.0)))) + #t) + (x + (pk 'fail x #f))))) + +(test-assert "gem-recursive-import with a specific version" + ;; Replace network resources with sample data. + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://rubygems.org/api/v2/rubygems/foo/versions/2.0.0.json" + (values (open-input-string test-foo-v2-json) + (string-length test-foo-v2-json))) + ("https://rubygems.org/api/v1/gems/bar.json" + (values (open-input-string test-bar-json) + (string-length test-bar-json))) + ("https://rubygems.org/api/v1/gems/bundler.json" + (values (open-input-string test-bundler-json) + (string-length test-bundler-json))) + (_ (error "Unexpected URL: " url))))) + (match (gem-recursive-import "foo" "2.0.0") + (`((package + (name "ruby-bar") + (version "1.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "bar" version)) + (sha256 + (base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + (build-system ruby-build-system) + (propagated-inputs (list bundler)) + (synopsis "Another cool gem") + (description "Another cool gem.") + (home-page "https://example.com") + (license #f)) ;no licensing info + (package + (name "ruby-foo") + (version "2.0.0") + (source + (origin + (method url-fetch) + (uri (rubygems-uri "foo" version)) + (sha256 + (base32 + "1a270mlajhrmpqbhxcqjqypnvgrq4pgixpv3w9gwp1wrrapnwrzk")))) + (build-system ruby-build-system) + (propagated-inputs (list bundler ruby-bar)) + (synopsis "A cool gem") + (description "This package provides a cool gem.") + (home-page "https://example.com") + (license (list license:expat license:asl2.0)))) + #t) + (x + (pk 'fail x #f))))) + +(test-equal "package-latest-release" + (list '("https://rubygems.org/downloads/foo-1.0.0.gem") + (list (upstream-input + (name "bundler") + (downstream-name name) + (type 'propagated)) + (upstream-input + (name "bar") + (downstream-name "ruby-bar") + (type 'propagated)))) + (mock ((guix http-client) http-fetch + (lambda (url . rest) + (match url + ("https://rubygems.org/api/v1/gems/foo.json" + (values (open-input-string test-foo-json) + (string-length test-foo-json))) + ("https://rubygems.org/api/v1/versions/foo.json" + (values (open-input-string test-foo-versions-json) + (string-length test-foo-versions-json))) + (_ (error "Unexpected URL: " url))))) + (let ((source (package-latest-release + (dummy-package "ruby-foo" + (version "0.1.2") + (source (dummy-origin + (method url-fetch) + (uri (rubygems-uri "foo" + version)))))))) + (list (upstream-source-urls source) + (upstream-source-inputs source))))) + +(test-end "gem") |
