github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/command/flag/megabytes_test.go (about)

     1  package flag_test
     2  
     3  import (
     4  	. "code.cloudfoundry.org/cli/command/flag"
     5  	flags "github.com/jessevdk/go-flags"
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  )
     9  
    10  var _ = Describe("Megabytes", func() {
    11  	var megabytes Megabytes
    12  
    13  	Describe("UnmarshalFlag", func() {
    14  		BeforeEach(func() {
    15  			megabytes = Megabytes{}
    16  		})
    17  
    18  		When("the suffix is M", func() {
    19  			It("interprets the number as megabytes", func() {
    20  				err := megabytes.UnmarshalFlag("17M")
    21  				Expect(err).ToNot(HaveOccurred())
    22  				Expect(megabytes.Value).To(BeEquivalentTo(17))
    23  			})
    24  		})
    25  
    26  		When("the suffix is MB", func() {
    27  			It("interprets the number as megabytes", func() {
    28  				err := megabytes.UnmarshalFlag("19MB")
    29  				Expect(err).ToNot(HaveOccurred())
    30  				Expect(megabytes.Value).To(BeEquivalentTo(19))
    31  			})
    32  		})
    33  
    34  		When("the suffix is G", func() {
    35  			It("interprets the number as gigabytes", func() {
    36  				err := megabytes.UnmarshalFlag("2G")
    37  				Expect(err).ToNot(HaveOccurred())
    38  				Expect(megabytes.Value).To(BeEquivalentTo(2048))
    39  			})
    40  		})
    41  
    42  		When("the suffix is GB", func() {
    43  			It("interprets the number as gigabytes", func() {
    44  				err := megabytes.UnmarshalFlag("3GB")
    45  				Expect(err).ToNot(HaveOccurred())
    46  				Expect(megabytes.Value).To(BeEquivalentTo(3072))
    47  			})
    48  		})
    49  
    50  		When("the suffix is T", func() {
    51  			It("interprets the number as terabytes", func() {
    52  				err := megabytes.UnmarshalFlag("2T")
    53  				Expect(err).ToNot(HaveOccurred())
    54  				Expect(megabytes.Value).To(BeEquivalentTo(2097152))
    55  			})
    56  		})
    57  
    58  		When("the suffix is TB", func() {
    59  			It("interprets the number as terabytes", func() {
    60  				err := megabytes.UnmarshalFlag("3TB")
    61  				Expect(err).ToNot(HaveOccurred())
    62  				Expect(megabytes.Value).To(BeEquivalentTo(3145728))
    63  			})
    64  		})
    65  
    66  		When("the suffix is lowercase", func() {
    67  			It("is case insensitive", func() {
    68  				err := megabytes.UnmarshalFlag("7m")
    69  				Expect(err).ToNot(HaveOccurred())
    70  				Expect(megabytes.Value).To(BeEquivalentTo(7))
    71  			})
    72  		})
    73  
    74  		When("the megabytes are invalid", func() {
    75  			It("returns an error", func() {
    76  				err := megabytes.UnmarshalFlag("invalid")
    77  				Expect(err).To(MatchError(&flags.Error{
    78  					Type:    flags.ErrRequired,
    79  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
    80  				}))
    81  			})
    82  		})
    83  
    84  		When("a decimal is used", func() {
    85  			It("returns an error", func() {
    86  				err := megabytes.UnmarshalFlag("1.2M")
    87  				Expect(err).To(MatchError(&flags.Error{
    88  					Type:    flags.ErrRequired,
    89  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
    90  				}))
    91  			})
    92  		})
    93  
    94  		When("the units are missing", func() {
    95  			It("returns an error", func() {
    96  				err := megabytes.UnmarshalFlag("37")
    97  				Expect(err).To(MatchError(&flags.Error{
    98  					Type:    flags.ErrRequired,
    99  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
   100  				}))
   101  			})
   102  		})
   103  
   104  		When("the suffix is B", func() {
   105  			It("returns an error", func() {
   106  				err := megabytes.UnmarshalFlag("10B")
   107  				Expect(err).To(MatchError(&flags.Error{
   108  					Type:    flags.ErrRequired,
   109  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
   110  				}))
   111  			})
   112  		})
   113  
   114  		When("value is empty", func() {
   115  			It("sets IsSet to false", func() {
   116  				err := megabytes.UnmarshalFlag("")
   117  				Expect(err).NotTo(HaveOccurred())
   118  				Expect(megabytes.IsSet).To(BeFalse())
   119  			})
   120  		})
   121  	})
   122  })