github.com/redhat-appstudio/release-service@v0.0.0-20240507143925-083712697924/api/v1alpha1/releaseplanadmission_types_test.go (about)

     1  /*
     2  Copyright 2023.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v1alpha1
    18  
    19  import (
    20  	. "github.com/onsi/ginkgo/v2"
    21  	. "github.com/onsi/gomega"
    22  	"github.com/redhat-appstudio/release-service/metadata"
    23  
    24  	"k8s.io/apimachinery/pkg/api/meta"
    25  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    26  )
    27  
    28  var _ = Describe("ReleasePlanAdmission type", func() {
    29  	When("ClearMatchingInfo method is called", func() {
    30  		var releasePlan *ReleasePlan
    31  		var releasePlanAdmission *ReleasePlanAdmission
    32  
    33  		BeforeEach(func() {
    34  			releasePlan = &ReleasePlan{
    35  				ObjectMeta: metav1.ObjectMeta{
    36  					Name:      "rp",
    37  					Namespace: "default",
    38  					Labels: map[string]string{
    39  						metadata.AutoReleaseLabel: "true",
    40  					},
    41  				},
    42  			}
    43  			releasePlanAdmission = &ReleasePlanAdmission{}
    44  		})
    45  
    46  		It("should wipe all releasePlans from the status and add matched condition as false", func() {
    47  			condition := meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
    48  			Expect(condition).To(BeNil())
    49  			releasePlanAdmission.Status.ReleasePlans = []MatchedReleasePlan{{Name: "rp"}}
    50  
    51  			releasePlanAdmission.ClearMatchingInfo()
    52  
    53  			Expect(releasePlanAdmission.Status.ReleasePlans).To(Equal([]MatchedReleasePlan{}))
    54  			condition = meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
    55  			Expect(condition).NotTo(BeNil())
    56  			Expect(condition.Status).To(Equal(metav1.ConditionFalse))
    57  		})
    58  
    59  		It("should switch the condition from true to false", func() {
    60  			releasePlanAdmission.MarkMatched(releasePlan)
    61  			condition := meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
    62  			Expect(condition.Status).To(Equal(metav1.ConditionTrue))
    63  
    64  			releasePlanAdmission.ClearMatchingInfo()
    65  			condition = meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
    66  			Expect(condition.Status).To(Equal(metav1.ConditionFalse))
    67  		})
    68  	})
    69  
    70  	When("MarkMatched method is called", func() {
    71  		var releasePlan *ReleasePlan
    72  		var releasePlanAdmission *ReleasePlanAdmission
    73  
    74  		BeforeEach(func() {
    75  			releasePlan = &ReleasePlan{
    76  				ObjectMeta: metav1.ObjectMeta{
    77  					Name:      "rp",
    78  					Namespace: "default",
    79  					Labels: map[string]string{
    80  						metadata.AutoReleaseLabel: "true",
    81  					},
    82  				},
    83  			}
    84  			releasePlanAdmission = &ReleasePlanAdmission{}
    85  		})
    86  
    87  		It("should add matched condition as true and add the releasePlan to the status", func() {
    88  			condition := meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
    89  			Expect(condition).To(BeNil())
    90  
    91  			releasePlanAdmission.MarkMatched(releasePlan)
    92  
    93  			Expect(releasePlanAdmission.Status.ReleasePlans).To(Equal([]MatchedReleasePlan{{Name: "default/rp", Active: true}}))
    94  			condition = meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
    95  			Expect(condition).NotTo(BeNil())
    96  			Expect(condition.Status).To(Equal(metav1.ConditionTrue))
    97  		})
    98  
    99  		It("should switch the condition from false to true", func() {
   100  			releasePlanAdmission.ClearMatchingInfo()
   101  			condition := meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
   102  			Expect(condition.Status).To(Equal(metav1.ConditionFalse))
   103  
   104  			releasePlanAdmission.MarkMatched(releasePlan)
   105  			condition = meta.FindStatusCondition(releasePlanAdmission.Status.Conditions, MatchedConditionType.String())
   106  			Expect(condition.Status).To(Equal(metav1.ConditionTrue))
   107  		})
   108  
   109  		It("should store the ReleasePlans in sorted order by Name", func() {
   110  			releasePlan2 := &ReleasePlan{
   111  				ObjectMeta: metav1.ObjectMeta{
   112  					Name:      "r",
   113  					Namespace: "default",
   114  					Labels: map[string]string{
   115  						metadata.AutoReleaseLabel: "true",
   116  					},
   117  				},
   118  			}
   119  
   120  			releasePlanAdmission.MarkMatched(releasePlan)
   121  			releasePlanAdmission.MarkMatched(releasePlan2)
   122  
   123  			Expect(releasePlanAdmission.Status.ReleasePlans).To(Equal([]MatchedReleasePlan{
   124  				{Name: "default/r", Active: true},
   125  				{Name: "default/rp", Active: true},
   126  			}))
   127  		})
   128  	})
   129  })