github.com/loafoe/cli@v7.1.0+incompatible/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 lowercase", func() {
    51  			It("is case insensitive", func() {
    52  				err := megabytes.UnmarshalFlag("7m")
    53  				Expect(err).ToNot(HaveOccurred())
    54  				Expect(megabytes.Value).To(BeEquivalentTo(7))
    55  			})
    56  		})
    57  
    58  		When("the megabytes are invalid", func() {
    59  			It("returns an error", func() {
    60  				err := megabytes.UnmarshalFlag("invalid")
    61  				Expect(err).To(MatchError(&flags.Error{
    62  					Type:    flags.ErrRequired,
    63  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
    64  				}))
    65  			})
    66  		})
    67  
    68  		When("a decimal is used", func() {
    69  			It("returns an error", func() {
    70  				err := megabytes.UnmarshalFlag("1.2M")
    71  				Expect(err).To(MatchError(&flags.Error{
    72  					Type:    flags.ErrRequired,
    73  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
    74  				}))
    75  			})
    76  		})
    77  
    78  		When("the units are missing", func() {
    79  			It("returns an error", func() {
    80  				err := megabytes.UnmarshalFlag("37")
    81  				Expect(err).To(MatchError(&flags.Error{
    82  					Type:    flags.ErrRequired,
    83  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
    84  				}))
    85  			})
    86  		})
    87  
    88  		When("the suffix is B", func() {
    89  			It("returns an error", func() {
    90  				err := megabytes.UnmarshalFlag("10B")
    91  				Expect(err).To(MatchError(&flags.Error{
    92  					Type:    flags.ErrRequired,
    93  					Message: `Byte quantity must be an integer with a unit of measurement like M, MB, G, or GB`,
    94  				}))
    95  			})
    96  		})
    97  
    98  		When("value is empty", func() {
    99  			It("sets IsSet to false", func() {
   100  				err := megabytes.UnmarshalFlag("")
   101  				Expect(err).NotTo(HaveOccurred())
   102  				Expect(megabytes.IsSet).To(BeFalse())
   103  			})
   104  		})
   105  	})
   106  })