blob: 169baf387ddbb17ebb5d9b70415e848d5454f969 [file] [log] [blame]
# encoding: utf-8
# frozen_string_literal: true
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'spec_helper'
require 'whimsy/asf'
describe ASF::Committee do
before {
Wunderbar.logger = nil # ensure we see warnings
}
describe "ASF::Committee::site" do
it "should return string for 'httpd'" do
res = ASF::Committee.find('HTTP Server').site
expect(res).to match(%r{https?://httpd\.apache\.org/?})
end
it "should return nil for 'z-z-z'" do
res = ASF::Committee.find('z-z-z').site
expect(res.class).to eq(NilClass)
end
end
describe "ASF::Committee::description" do
it "should return string for 'httpd'" do
res = ASF::Committee.find('HTTP Server').description
expect(res).to match(%r{Apache Web Server})
end
it "should return nil for 'z-z-z'" do
res = ASF::Committee.find('z-z-z').description
expect(res.class).to eq(NilClass)
end
end
describe "ASF::Committee.metadata" do
it "should return hash for 'httpd'" do
res = ASF::Committee.metadata('httpd')
expect(res.class).to eq(Hash)
expect(res[:site]).to match(%r{https?://httpd\.apache\.org/?})
end
it "should return nil for 'z-z-z'" do
res = ASF::Committee.metadata('z-z-z')
expect(res.class).to eq(NilClass)
end
it "should return hash for 'httpd Committee'" do
cttee = ASF::Committee.find('HTTP Server')
res = ASF::Committee.metadata(cttee)
expect(res.class).to eq(Hash)
expect(res[:site]).to match(%r{https?://httpd\.apache\.org/?})
end
it "should return hash for 'comdev'" do
res = ASF::Committee.metadata('comdev')
expect(res.class).to eq(Hash)
expect(res[:site]).to match(%r{https?://community\.apache\.org/?})
end
end
date_established = Date.parse('1970-01-01')
established_value = '1970-01' # as per yaml
describe "ASF::Committee.appendtlpmetadata" do
board = ASF::SVN.find('board')
file = File.join(board, 'committee-info.yaml')
input = File.read(file)
it "should fail for 'httpd'" do
res = nil
expect {
res = ASF::Committee.appendtlpmetadata(input, 'httpd', 'description', date_established)
}.to output("_WARN Entry for 'httpd' already exists under :tlps\n").to_stderr
expect(res).to eql(input)
end
it "should fail for 'comdev'" do
res = nil
expect {
res = ASF::Committee.appendtlpmetadata(input, 'comdev', 'description', date_established)
}.to output("_WARN Entry for 'comdev' already exists under :cttees\n").to_stderr
expect(res).to eql(input)
end
pmc = 'a-b-c'
it "should succeed for '#{pmc}'" do
res = nil
desc = 'Description of A-B-C'
expect { res = ASF::Committee.appendtlpmetadata(input, pmc, desc, date_established) }.to output("").to_stderr
expect(res).not_to eq(input)
tlps = YAML.safe_load(res, permitted_classes: [Symbol])[:tlps]
abc = tlps[pmc]
expect(abc.class).to eq(Hash)
expect(abc[:site]).to match(%r{https?://#{pmc}\.apache\.org/?})
expect(abc[:description]).to eq(desc)
expect(abc[:established]).to eq(established_value)
end
it "resume should succeed for 'avalon' (no current diary)" do
pmc = 'avalon'
original = YAML.safe_load(input, permitted_classes: [Symbol])[:tlps][pmc]
expect(original[:retired]).not_to be_nil
expect(original[:diary]).to be_nil
date_resumed = Time.now
resumed_value = date_resumed.strftime('%Y-%m')
res = nil
expect { res = ASF::Committee.appendtlpmetadata(input, pmc, 'unused', date_resumed) }.to output("").to_stderr
expect(res).not_to equal(input)
tlps = YAML.safe_load(res, permitted_classes: [Symbol])[:tlps]
updated = tlps[pmc]
expect(updated.class).to eq(Hash)
expect(updated[:site]).to eq(original[:site])
expect(updated[:retired]).to be_nil # no longer retired
expect(updated[:description]).to eq(original[:description])
expect(updated[:established]).to eq(original[:established])
diary = [
{established: original[:established]},
{retired: original[:retired]},
{resumed: resumed_value}
]
expect(updated[:diary]).to eq(diary)
end
it "resume should succeed for 'jakarta' (has diary)" do
pmc = 'jakarta'
original = YAML.safe_load(input, permitted_classes: [Symbol])[:tlps][pmc]
expect(original[:retired]).not_to be_nil
expect(original[:diary]).not_to be_nil
date_resumed = Time.now
resumed_value = date_resumed.strftime('%Y-%m')
res = nil
expect { res = ASF::Committee.appendtlpmetadata(input, pmc, 'unused', date_resumed) }.to output("").to_stderr
expect(res).not_to equal(input)
tlps = YAML.safe_load(res, permitted_classes: [Symbol])[:tlps]
updated = tlps[pmc]
expect(updated.class).to eq(Hash)
expect(updated[:site]).to eq(original[:site])
expect(updated[:retired]).to be_nil # no longer retired
expect(updated[:description]).to eq(original[:description])
expect(updated[:established]).to eq(original[:established])
diary = [
{retired: original[:retired]},
{resumed: resumed_value}
]
expect(updated[:diary]).to eq(diary)
end
end
describe "ASF::ASF::Committee.record_termination" do
cinfoy = File.join(ASF::SVN['board'], 'committee-info.yaml')
yyyymm = '2020-10'
data = File.read cinfoy
yaml = YAML.safe_load(data, permitted_classes: [Symbol])
it "should contain HTTPD, but not retired" do
para = yaml[:tlps]['httpd']
expect(para).not_to eql(nil)
expect(para[:retired]).to eql(nil)
end
it "should add retired tag to HTTPD" do
data = ASF::Committee.record_termination(data, 'HTTP Server', yyyymm)
yaml = YAML.safe_load(data, permitted_classes: [Symbol])
para = yaml[:tlps]['httpd']
expect(para).not_to eql(nil)
expect(para[:retired]).to eql(yyyymm)
expect(para[:name]).to eql('HTTP Server')
end
yaml = YAML.safe_load(data, permitted_classes: [Symbol])
name = 'XYZXYZ'
pmc = ASF::Committee.to_canonical(name)
it "should not contain XYZXYZ" do
para = yaml[:tlps][pmc]
expect(para).to eql(nil)
end
it "should now contain XYZXYZ" do
data = ASF::Committee.record_termination(data, name, yyyymm)
yaml = YAML.safe_load(data, permitted_classes: [Symbol])
para = yaml[:tlps][pmc]
expect(para).not_to eql(nil)
expect(para[:retired]).to eql(yyyymm)
expect(para[:name]).to eql(name)
end
end
end