[DRE-commits] [schleuder] 01/02: New upstream version 3.0.0~beta11

Georg Faerber georg-alioth-guest at moszumanska.debian.org
Fri Dec 9 21:06:39 UTC 2016


This is an automated email from the git hooks/post-receive script.

georg-alioth-guest pushed a commit to branch wip
in repository schleuder.

commit bac56521c13cf07608d664a587b9d4d4858c0335
Author: Georg Faerber <georg at riseup.net>
Date:   Wed Dec 7 18:22:17 2016 +0100

    New upstream version 3.0.0~beta11
---
 .travis.yml                                        |   4 ++
 CHANGELOG.md                                       |  14 ++++++-
 Gemfile.lock                                       |   2 +-
 README.md                                          |   8 ++--
 Rakefile                                           |  43 +++++++++++++++++----
 gems/schleuder-3.0.0.beta10.gem                    | Bin 0 -> 39424 bytes
 gems/schleuder-3.0.0.beta10.gem.sig                | Bin 0 -> 587 bytes
 gems/schleuder-3.0.0.beta10.tar.gz                 | Bin 0 -> 688196 bytes
 gems/schleuder-3.0.0.beta10.tar.gz.sig             | Bin 0 -> 587 bytes
 lib/schleuder.rb                                   |  17 ++++----
 lib/schleuder/cli.rb                               |  35 +++++++++--------
 lib/schleuder/cli/cert.rb                          |   5 ++-
 lib/schleuder/cli/schleuder_cert_manager.rb        |   3 +-
 lib/schleuder/list.rb                              |  32 ++++++++-------
 lib/schleuder/list_builder.rb                      |   2 +-
 lib/schleuder/listlogger.rb                        |   3 +-
 lib/schleuder/mail/message.rb                      |  37 ++++++++++++++++--
 lib/schleuder/version.rb                           |   2 +-
 man/schleuder-api-daemon.8                         |   3 ++
 schleuder.gemspec                                  |   2 +-
 spec/gnupg/.gpg-v21-migrated                       |   0
 .../0970A1A2A045304F53EF1810032DDC3F5418C7A7.key   | Bin 0 -> 1874 bytes
 .../3A013015E84C20C6A7A21C2CCF508FB81C9F50C1.key   | Bin 0 -> 2529 bytes
 spec/gnupg/pubring.gpg                             | Bin 0 -> 2225 bytes
 spec/gnupg/pubring.gpg~                            | Bin 0 -> 2225 bytes
 spec/gnupg/random_seed                             | Bin 0 -> 600 bytes
 spec/gnupg/secring.gpg                             | Bin 0 -> 4807 bytes
 spec/gnupg/trustdb.gpg                             | Bin 0 -> 1360 bytes
 spec/schleuder/list_spec.rb                        |  33 ++++++++++++++++
 spec/spec_helper.rb                                |   4 ++
 30 files changed, 188 insertions(+), 61 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index 6eaad2b..872b3f4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,3 +11,7 @@ before_script:
   - SCHLEUDER_ENV=test SCHLEUDER_CONFIG=spec/schleuder.yml bundle exec rake db:create db:schema:load
 script:
   - bundle exec rspec
+notifications:
+  email:
+    recipients:
+      - schleuder at nadir.org
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a3e84e8..67bd161 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,18 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 
 The format of this file is based on [Keep a Changelog](http://keepachangelog.com/).
 
-## [Unreleased]
+## [3.0.0.beta11] / 2016-12-07
+
+### Changed
+
+ * Fixed recognition and validation of clearsigned-inline messages.
+ * Fix log-file rotation (for list.log).
+ * Show hint to set `use_tls: true` after generation of certificate.
+
+### Added
+
+ * During installation, show error message and exit if data of an installation of schleuder-2.x is found in the configured lists_dir.
+ * More tests.
 
 
 ## [3.0.0.beta10] / 2016-12-05
@@ -14,6 +25,7 @@ The format of this file is based on [Keep a Changelog](http://keepachangelog.com
 
  * Fixed tarball to contain correct version and state of changelog.
 
+
 ## [3.0.0.beta9] / 2016-12-02
 
 ### Added
diff --git a/Gemfile.lock b/Gemfile.lock
index 75fe78b..2a6e3b0 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
 PATH
   remote: .
   specs:
-    schleuder (3.0.0.beta10)
+    schleuder (3.0.0.beta11)
       activerecord (~> 4.1)
       mail-gpg (~> 0.2.7)
       rake (~> 10)
diff --git a/README.md b/README.md
index fe40393..4772bb4 100644
--- a/README.md
+++ b/README.md
@@ -42,15 +42,15 @@ Additionally these **rubygems** are required (will be installed automatically un
 Installing Schleuder
 ------------
 
-1. Download [the gem](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta10.gem) and [the OpenPGP-signature](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta10.gem.sig) and verify:
+1. Download [the gem](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta11.gem) and [the OpenPGP-signature](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta11.gem.sig) and verify:
    ```
    gpg --recv-key 0xB3D190D5235C74E1907EACFE898F2C91E2E6E1F3
-   gpg --verify schleuder-3.0.0.beta10.gem.sig
+   gpg --verify schleuder-3.0.0.beta11.gem.sig
    ```
 
 2. If all went well install the gem:
    ```
-   gem install schleuder-3.0.0.beta10.gem
+   gem install schleuder-3.0.0.beta11.gem
    ```
 
 3. Set up schleuder:
@@ -118,4 +118,4 @@ GNU GPL 3.0. Please see [LICENSE.txt](LICENSE.txt).
 Alternative Download
 --------------------
 
-Alternatively to the gem-files you can download the latest release as [a tarball](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta10.tar.gz) and [its OpenPGP-signature](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta10.tar.gz.sig).
+Alternatively to the gem-files you can download the latest release as [a tarball](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta11.tar.gz) and [its OpenPGP-signature](https://git.codecoop.org/schleuder/schleuder3/raw/master/gems/schleuder-3.0.0.beta11.tar.gz.sig).
diff --git a/Rakefile b/Rakefile
index 85a7c24..0564fd5 100644
--- a/Rakefile
+++ b/Rakefile
@@ -19,6 +19,15 @@ end
 # ActiveRecord requires this task to be present
 Rake::Task.define_task("db:environment")
 
+def edit_and_add_file(filename)
+  puts "Please edit #{filename} to refer to version #{@version}"
+  if system("gvim -f #{filename}.md")
+    `git add #{filename}.md`
+  else
+    exit 1
+  end
+end
+
 def move_sign_and_add(file)
   `mv -iv #{file} gems/`
   `cd gems && gpg -u #{@gpguid} -b #{file}`
@@ -33,17 +42,30 @@ task :publish_gem => :website
 task :git_tag => :check_version
 
 desc "Build new version: git-tag and gem-file"
-task :new_version => [:check_version, :edit_readme, :git_add_version, :gem, :tarball, :git_commit, :git_tag] do
+task :new_version => [
+    :check_version,
+    :edit_readme, :edit_changelog,
+    :git_add_version, :update_gemfile_lock,
+    :git_commit,
+    :gem, :tarball, :git_amend_gems,
+    :git_tag
+  ] do
+end
+
+desc "Edit CHANGELOG.md"
+task :edit_changelog do
+  edit_and_add_file('CHANGELOG')
 end
 
 desc "Edit README"
 task :edit_readme do
-  puts "Please edit the README to refer to version #{@version}"
-  if system('gvim -f README.md')
-    `git add README.md`
-  else
-    exit 1
-  end
+  edit_and_add_file('README')
+end
+
+desc "Make sure the Gemfile.lock is up to date and added to the index"
+task :update_gemfile_lock do
+  `bundle install`
+  `git add Gemfile.lock`
 end
 
 desc 'git-tag HEAD as new version'
@@ -58,7 +80,12 @@ end
 
 desc "Commit changes as new version"
 task :git_commit do
-  `git commit -m "Version #{@version} (README, gems)"`
+  `git commit -m "Version #{@version} (README, gems, ...)"`
+end
+
+desc "git-amend gem, tarball and signatures to previous commit"
+task :git_amend_gems do
+  `git add gems && git commit --amend -C HEAD`
 end
 
 desc 'Build, sign and commit a gem-file.'
diff --git a/gems/schleuder-3.0.0.beta10.gem b/gems/schleuder-3.0.0.beta10.gem
new file mode 100644
index 0000000..854ba83
Binary files /dev/null and b/gems/schleuder-3.0.0.beta10.gem differ
diff --git a/gems/schleuder-3.0.0.beta10.gem.sig b/gems/schleuder-3.0.0.beta10.gem.sig
new file mode 100644
index 0000000..5ef90e6
Binary files /dev/null and b/gems/schleuder-3.0.0.beta10.gem.sig differ
diff --git a/gems/schleuder-3.0.0.beta10.tar.gz b/gems/schleuder-3.0.0.beta10.tar.gz
new file mode 100644
index 0000000..6438a91
Binary files /dev/null and b/gems/schleuder-3.0.0.beta10.tar.gz differ
diff --git a/gems/schleuder-3.0.0.beta10.tar.gz.sig b/gems/schleuder-3.0.0.beta10.tar.gz.sig
new file mode 100644
index 0000000..2d927de
Binary files /dev/null and b/gems/schleuder-3.0.0.beta10.tar.gz.sig differ
diff --git a/lib/schleuder.rb b/lib/schleuder.rb
index fe097c6..ebec025 100644
--- a/lib/schleuder.rb
+++ b/lib/schleuder.rb
@@ -15,8 +15,9 @@ require 'active_record'
 require 'hkp'
 
 # Load schleuder
-rootdir = Pathname.new(__FILE__).dirname.dirname.realpath
-$:.unshift File.join(rootdir, 'lib')
+libdir = Pathname.new(__FILE__).dirname.realpath
+rootdir = libdir.dirname
+$:.unshift libdir
 
 # Monkeypatches
 require 'schleuder/mail/message.rb'
@@ -27,7 +28,7 @@ require 'schleuder/gpgme/ctx.rb'
 
 # The Code[tm]
 require 'schleuder/errors/base'
-Dir[rootdir.to_s + "/lib/schleuder/errors/*.rb"].each do |file|
+Dir["#{libdir}/schleuder/errors/*.rb"].each do |file|
   require file
 end
 # Load schleuder/conf before the other classes, it defines constants!
@@ -37,14 +38,14 @@ require 'schleuder/logger_notifications'
 require 'schleuder/logger'
 require 'schleuder/listlogger'
 require 'schleuder/plugins_runner'
-Dir[rootdir.to_s + "/lib/schleuder/plugins/*.rb"].each do |file|
+Dir["#{libdir}/schleuder/plugins/*.rb"].each do |file|
   require file
 end
 require 'schleuder/filters_runner'
-Dir[rootdir.to_s + "/lib/schleuder/filters/*.rb"].each do |file|
+Dir["#{libdir}/schleuder/filters/*.rb"].each do |file|
   require file
 end
-Dir[rootdir.to_s + "/lib/schleuder/validators/*.rb"].each do |file|
+Dir["#{libdir}/schleuder/validators/*.rb"].each do |file|
   require file
 end
 require 'schleuder/runner'
@@ -71,8 +72,10 @@ Mail.defaults do
   delivery_method :smtp, Schleuder::Conf.smtp_settings.symbolize_keys
 end
 
-I18n.load_path += Dir[rootdir.to_s + "/locales/*.yml"]
+I18n.load_path += Dir["#{rootdir}/locales/*.yml"]
 I18n.enforce_available_locales = true
 I18n.default_locale = :en
 
+File.umask(0027)
+
 include Schleuder
diff --git a/lib/schleuder/cli.rb b/lib/schleuder/cli.rb
index 7a3ebe7..6ec91d0 100644
--- a/lib/schleuder/cli.rb
+++ b/lib/schleuder/cli.rb
@@ -68,13 +68,20 @@ module Schleuder
       config_dir = Pathname.new(ENV['SCHLEUDER_CONFIG']).dirname
       root_dir = Pathname.new(ENV['SCHLEUDER_ROOT'])
 
+      # Check if lists_dir contains v2-data.
+      if Dir.glob("#{Conf.lists_dir}/*/*/members.conf").size > 0
+        msg = "Lists directory #{Conf.lists_dir} appears to contain data from a Schleuder version 2.x installation.\nPlease move it out of the way or configure a different `lists_dir` in `#{ENV['SCHLEUDER_CONFIG']}`.\nTo migrate lists from Schleuder v2 to Schleuder v3 please use `schleuder migrate_v2_list` after the installation succeeded."
+        fatal msg, 2
+      end
+
       [Conf.lists_dir, config_dir].each do |dir|
         dir = Pathname.new(dir)
         if ! dir.exist?
-          if dir.dirname.writable?
+          begin
             dir.mkpath
-          else
-            fatal "Cannot create required directory due to lacking write permissions, please create manually and then run this command again:\n#{dir}"
+          rescue Errno::EACCES => exc
+            problem_dir = exc.message.split(' - ').last
+            fatal "Cannot create required directory due to lacking write permissions: #{problem_dir}.\nPlease fix the permissions or create the directory manually and then run this command again."
           end
         end
       end
@@ -90,22 +97,14 @@ module Schleuder
         end
       end
 
-      chmod_files = [
-          ENV['SCHLEUDER_CONFIG'],
-          ENV['SCHLEUDER_LIST_DEFAULTS'],
-          Conf.lists_dir
-      ]
-      if Conf.database['adapter'].match(/sqlite/)
-        chmod_files << Conf.database['database']
-      end
-
-      FileUtils.chmod_R('o-rwx', chmod_files)
 
       if ActiveRecord::SchemaMigration.table_exists?
         say `cd #{root_dir} && rake db:migrate`
       else
         say `cd #{root_dir} && rake db:schema:load`
-        say "NOTE: The database was prepared using sqlite. If you prefer to use a different DBMS please edit the 'database'-section in /etc/schleuder/schleuder.yml, create the database, install the corresponding ruby-library (e.g. `gem install mysql`) and run this current command again"
+        if Conf.database['adapter'].match(/sqlite/)
+          say "NOTE: The database was prepared using sqlite. If you prefer to use a different DBMS please edit the 'database'-section in /etc/schleuder/schleuder.yml, create the database, install the corresponding ruby-library (e.g. `gem install mysql`) and run this current command again"
+        end
       end
 
       say "Schleuder has been set up. You can now create a new list using `schleuder-cli`.\nWe hope you enjoy!"
@@ -228,9 +227,9 @@ Please notify the users and admins of this list of these changes.
     end
 
     no_commands do
-      def fatal(msg)
+      def fatal(msg, exitcode=1)
         error("Error: #{msg}")
-        exit 1
+        exit exitcode
       end
 
       KEYWORDS = {
@@ -253,6 +252,10 @@ Please notify the users and admins of this list of these changes.
           KEYWORDS[keyword.downcase]
         end.compact
       end
+
+      def chmod(file)
+        FileUtils.chmod_R('o-rwx', file)
+      end
     end
   end
 end
diff --git a/lib/schleuder/cli/cert.rb b/lib/schleuder/cli/cert.rb
index 5974aad..2b98ad1 100644
--- a/lib/schleuder/cli/cert.rb
+++ b/lib/schleuder/cli/cert.rb
@@ -6,7 +6,10 @@ module Schleuder
     def generate
       key = Conf.api['tls_key_file']
       cert = Conf.api['tls_cert_file']
-      SchleuderCertManager.generate('schleuder', key, cert)
+      fingerprint = SchleuderCertManager.generate('schleuder', key, cert)
+      puts "Fingerprint of generated certificate: #{fingerprint}"
+      puts "Have this fingerprint included into the configuration-file of all clients that want to connect to your Schleuder API."
+      puts "To activate TLS set `use_tls: true` in #{ENV['SCHLEUDER_CONFIG']} and restart schleuder-api-daemon."
     end
 
     desc 'fingerprint', 'Show fingerprint of configured certificate.'
diff --git a/lib/schleuder/cli/schleuder_cert_manager.rb b/lib/schleuder/cli/schleuder_cert_manager.rb
index 68e3fe4..0cf203f 100644
--- a/lib/schleuder/cli/schleuder_cert_manager.rb
+++ b/lib/schleuder/cli/schleuder_cert_manager.rb
@@ -43,8 +43,7 @@ class SchleuderCertManager
     end
     puts "Certificate written to: #{filename_cert}"
 
-    puts "Fingerprint of generated certificate: #{fingerprint(cert)}"
-    puts "Have this fingerprint included into the configuration-file of all clients that want to connect to your Schleuder API."
+    fingerprint(cert)
   rescue => exc
     error exc.message
   end
diff --git a/lib/schleuder/list.rb b/lib/schleuder/list.rb
index 212ad6e..4d7a087 100644
--- a/lib/schleuder/list.rb
+++ b/lib/schleuder/list.rb
@@ -189,7 +189,7 @@ module Schleuder
       @gpg_ctx ||= begin
         # TODO: figure out why set it again...
         # Set GNUPGHOME when list is created.
-        ENV['GNUPGHOME'] = listdir
+        set_gnupg_home
         GPGME::Ctx.new armor: true
       end
     end
@@ -277,19 +277,25 @@ module Schleuder
 
     private
 
-      def delete_listdir
-        if File.exists?(self.listdir)
-          FileUtils.rm_r(self.listdir, secure: true)
-          Schleuder.logger.info "Deleted listdir"
-        else
-          # Don't use list-logger here — if the list-dir isn't present we can't log to it!
-          Schleuder.logger.info "Couldn't delete listdir, directly not present"
-        end
-        true
-      rescue => exc
+    def set_gnupg_home
+      if ENV["SCHLEUDER_ENV"] != "test"
+        ENV['GNUPGHOME'] = listdir
+      end
+    end
+
+    def delete_listdir
+      if File.exists?(self.listdir)
+        FileUtils.rm_r(self.listdir, secure: true)
+        Schleuder.logger.info "Deleted listdir"
+      else
         # Don't use list-logger here — if the list-dir isn't present we can't log to it!
-        Schleuder.logger.error "Error while deleting listdir: #{exc}"
-        return false
+        Schleuder.logger.info "Couldn't delete listdir, directly not present"
       end
+      true
+    rescue => exc
+      # Don't use list-logger here — if the list-dir isn't present we can't log to it!
+      Schleuder.logger.error "Error while deleting listdir: #{exc}"
+      return false
+    end
   end
 end
diff --git a/lib/schleuder/list_builder.rb b/lib/schleuder/list_builder.rb
index f1b5591..f6cb195 100644
--- a/lib/schleuder/list_builder.rb
+++ b/lib/schleuder/list_builder.rb
@@ -144,7 +144,7 @@ module Schleuder
           raise Errors::ListdirProblem.new(@list_dir, :not_writable)
         end
       else
-        FileUtils.mkdir_p(@list_dir, mode: 0700)
+        FileUtils.mkdir_p(@list_dir)
       end
     end
 
diff --git a/lib/schleuder/listlogger.rb b/lib/schleuder/listlogger.rb
index 8c4f281..67939cd 100644
--- a/lib/schleuder/listlogger.rb
+++ b/lib/schleuder/listlogger.rb
@@ -2,8 +2,7 @@ module Schleuder
   class Listlogger < ::Logger
     include LoggerNotifications
     def initialize(list)
-      file = File.open(list.logfile, File::WRONLY | File::APPEND | File::CREAT, 0640)
-      super(file, 'daily')
+      super(list.logfile, 'daily')
       @from = list.email
       @adminaddresses = list.admins.map(&:email)
       @level = ::Logger.const_get(list.log_level.upcase)
diff --git a/lib/schleuder/mail/message.rb b/lib/schleuder/mail/message.rb
index 8b59225..e87161f 100644
--- a/lib/schleuder/mail/message.rb
+++ b/lib/schleuder/mail/message.rb
@@ -49,7 +49,11 @@ module Mail
           clean.add_part Mail::Part.new(part)
         end
       else
-        clean.add_part Mail::Part.new(self.body)
+        # Don't use self.to_s here — that includes all the headers we *don't*
+        # want to copy.
+        new_part = Mail::Part.new
+        new_part.body = self.body.to_s
+        clean.add_part Mail::Part.new(new_part)
       end
       clean
     end
@@ -64,8 +68,18 @@ module Mail
     end
 
     def signature
-      # Theoretically there might be more than one signing key, in practice this is neglectable.
-      signatures.try(:first)
+      case signatures.size
+      when 0
+        if multipart?
+          signature_multipart_inline
+        else
+          nil
+        end
+      when 1
+        signatures.first
+      else
+        raise "Multiple signatures found! Cannot handle!"
+      end
     end
 
     def was_validly_signed?
@@ -279,6 +293,23 @@ module Mail
     private
 
 
+    # Looking for signatures in each part. They are not aggregated into the main part.
+    # We only return the signature if all parts are validly signed by the same key.
+    def signature_multipart_inline
+      fingerprints = parts.map do |part|
+        if part.signature_valid?
+          part.signature.fpr
+        else
+          nil
+        end
+      end
+      if fingerprints.uniq.size == 1
+        parts.first.signature
+      else
+        nil
+      end
+    end
+
     def first_plaintext_part(part=nil)
       part ||= self
       if part.multipart?
diff --git a/lib/schleuder/version.rb b/lib/schleuder/version.rb
index c93e884..42395d1 100644
--- a/lib/schleuder/version.rb
+++ b/lib/schleuder/version.rb
@@ -1,3 +1,3 @@
 module Schleuder
-  VERSION = '3.0.0.beta10'
+  VERSION = '3.0.0.beta11'
 end
diff --git a/man/schleuder-api-daemon.8 b/man/schleuder-api-daemon.8
index c7170df..74f12ec 100644
--- a/man/schleuder-api-daemon.8
+++ b/man/schleuder-api-daemon.8
@@ -3,6 +3,9 @@
 .
 .TH "SCHLEUDER\-API\-DAEMON" "8" "November 2016" "" ""
 .
+.SH "NAME"
+\fBschleuder\-api\-daemon\fR \- HTTP\-API of Schleuder(8)
+.
 .SH "SYNOPSIS"
 \fBschleuder\-api\-daemon\fR
 .
diff --git a/schleuder.gemspec b/schleuder.gemspec
index 708f686..a7fcf1b 100644
--- a/schleuder.gemspec
+++ b/schleuder.gemspec
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
   s.add_development_dependency 'database_cleaner'
   s.post_install_message = "
 
-    Please consider additionallly installing schleuder-cli (allows to
+    Please consider additionally installing schleuder-cli (allows to
     configure lists from the command line).
 
     To set up Schleuder on this system please run `schleuder install`.
diff --git a/spec/gnupg/.gpg-v21-migrated b/spec/gnupg/.gpg-v21-migrated
new file mode 100644
index 0000000..e69de29
diff --git a/spec/gnupg/private-keys-v1.d/0970A1A2A045304F53EF1810032DDC3F5418C7A7.key b/spec/gnupg/private-keys-v1.d/0970A1A2A045304F53EF1810032DDC3F5418C7A7.key
new file mode 100644
index 0000000..845bc0d
Binary files /dev/null and b/spec/gnupg/private-keys-v1.d/0970A1A2A045304F53EF1810032DDC3F5418C7A7.key differ
diff --git a/spec/gnupg/private-keys-v1.d/3A013015E84C20C6A7A21C2CCF508FB81C9F50C1.key b/spec/gnupg/private-keys-v1.d/3A013015E84C20C6A7A21C2CCF508FB81C9F50C1.key
new file mode 100644
index 0000000..1629318
Binary files /dev/null and b/spec/gnupg/private-keys-v1.d/3A013015E84C20C6A7A21C2CCF508FB81C9F50C1.key differ
diff --git a/spec/gnupg/pubring.gpg b/spec/gnupg/pubring.gpg
new file mode 100644
index 0000000..45575bb
Binary files /dev/null and b/spec/gnupg/pubring.gpg differ
diff --git a/spec/gnupg/pubring.gpg~ b/spec/gnupg/pubring.gpg~
new file mode 100644
index 0000000..7738906
Binary files /dev/null and b/spec/gnupg/pubring.gpg~ differ
diff --git a/spec/gnupg/random_seed b/spec/gnupg/random_seed
new file mode 100644
index 0000000..314535b
Binary files /dev/null and b/spec/gnupg/random_seed differ
diff --git a/spec/gnupg/secring.gpg b/spec/gnupg/secring.gpg
new file mode 100644
index 0000000..ed4f93c
Binary files /dev/null and b/spec/gnupg/secring.gpg differ
diff --git a/spec/gnupg/trustdb.gpg b/spec/gnupg/trustdb.gpg
new file mode 100644
index 0000000..643c054
Binary files /dev/null and b/spec/gnupg/trustdb.gpg differ
diff --git a/spec/schleuder/list_spec.rb b/spec/schleuder/list_spec.rb
index db2762d..6a83e0b 100644
--- a/spec/schleuder/list_spec.rb
+++ b/spec/schleuder/list_spec.rb
@@ -297,4 +297,37 @@ describe Schleuder::List do
       expect(list.email).to eq "foo at bar.org"
     end
   end
+
+  describe "#admins" do
+    it "returns subscriptions of admin users" do
+      list = Schleuder::List.create(
+        email: "foo at bar.org",
+        fingerprint: "aaaadddd0000999",
+      )
+      admin_subscription = Schleuder::Subscription.create(
+        email: "admin at foo.org",
+        admin: true,
+        list_id: list.id,
+      )
+      _user_subscription = Schleuder::Subscription.create(
+        email: "user at foo.org",
+        admin: false,
+        list_id: list.id,
+      )
+
+      expect(list.admins).to eq [admin_subscription]
+    end
+  end
+
+  describe "#key" do
+    it "returns the key with the fingerprint of the list" do
+      set_test_gnupg_home
+      list = Schleuder::List.create(
+        email: "foo at bar.org",
+        fingerprint: "59C7 1FB3 8AEE 22E0 91C7  8259 D063 5044 0F75 9BD3",
+      )
+
+      expect(list.key.fingerprint()).to eq "59C71FB38AEE22E091C78259D06350440F759BD3"
+    end
+  end
 end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 79f8972..74454a6 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -38,4 +38,8 @@ RSpec.configure do |config|
     # `true` in RSpec 4.
     mocks.verify_partial_doubles = true
   end
+
+  def set_test_gnupg_home
+    ENV["GNUPGHOME"] = "spec/gnupg"
+  end
 end

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ruby-extras/schleuder.git



More information about the Pkg-ruby-extras-commits mailing list