diff options
author | Taiju HIGASHI <higashi@taiju.info> | 2022-09-09 22:47:36 +0900 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2022-09-17 19:09:27 +0200 |
commit | 5d22261db3d5099d745b9e8c8484545e546b319e (patch) | |
tree | 2c72e5bd6d22e8a8d58ed60dca844ce6ef5ab496 /tests | |
parent | c54ef97c80f98fba77304efc560945fe78a4bafb (diff) | |
download | guix-5d22261db3d5099d745b9e8c8484545e546b319e.tar.gz guix-5d22261db3d5099d745b9e8c8484545e546b319e.zip |
import: gem: Support importing a specific version of a gem.
* guix/import/gem.scm: (rubygems-fetch, gem->guix-package)
(gem-recursive-import): Fix to fetch the specified version of the gem.
* guix/scripts/import/gem.scm (show-help): Update the help message.
(guix-import-gem): Modify so the version number to be passed to subsequent
procedures.
* tests/gem.scm: Add tests.
* doc/guix.texi (Invoking guix import): Document.
Signed-off-by: Christopher Baines <mail@cbaines.net>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/gem.scm | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/tests/gem.scm b/tests/gem.scm index c8fe15398e..6aa0d279dc 100644 --- a/tests/gem.scm +++ b/tests/gem.scm @@ -3,6 +3,7 @@ ;;; 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> ;;; ;;; This file is part of GNU Guix. ;;; @@ -44,6 +45,22 @@ \"licenses\": [\"MIT\", \"Apache 2.0\"] }") +(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\", @@ -103,6 +120,35 @@ (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 @@ -170,4 +216,71 @@ (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-bundler") + ('version "1.14.2") + ('source + ('origin + ('method 'url-fetch) + ('uri ('rubygems-uri "bundler" 'version)) + ('sha256 + ('base32 + "1446xiz7zg0bz7kgx9jv84y0s4hpsg61dj5l3qb0i00avc1kxd9v")))) + ('build-system 'ruby-build-system) + ('synopsis "Ruby gem bundler") + ('description "Ruby gem bundler") + ('home-page "https://bundler.io/") + ('license 'license:expat)) + ('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-end "gem") |