github.com/sacloud/iaas-api-go@v1.12.0/fake/ops_bill.go (about) 1 // Copyright 2022-2023 The sacloud/iaas-api-go Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package fake 16 17 import ( 18 "context" 19 "time" 20 21 "github.com/sacloud/iaas-api-go" 22 "github.com/sacloud/iaas-api-go/types" 23 ) 24 25 // ByContract is fake implementation 26 func (o *BillOp) ByContract(ctx context.Context, accountID types.ID) (*iaas.BillByContractResult, error) { 27 results, _ := find(o.key, iaas.APIDefaultZone, nil) 28 var values []*iaas.Bill 29 for _, res := range results { 30 dest := &iaas.Bill{} 31 copySameNameField(res, dest) 32 values = append(values, dest) 33 } 34 return &iaas.BillByContractResult{ 35 Total: len(results), 36 Count: len(results), 37 From: 0, 38 Bills: values, 39 }, nil 40 } 41 42 // ByContractYear is fake implementation 43 func (o *BillOp) ByContractYear(ctx context.Context, accountID types.ID, year int) (*iaas.BillByContractYearResult, error) { 44 results, _ := find(o.key, iaas.APIDefaultZone, nil) 45 var values []*iaas.Bill 46 for _, res := range results { 47 dest := &iaas.Bill{} 48 copySameNameField(res, dest) 49 if dest.Date.Year() == year { 50 values = append(values, dest) 51 } 52 } 53 return &iaas.BillByContractYearResult{ 54 Total: len(results), 55 Count: len(results), 56 From: 0, 57 Bills: values, 58 }, nil 59 } 60 61 // ByContractYearMonth is fake implementation 62 func (o *BillOp) ByContractYearMonth(ctx context.Context, accountID types.ID, year int, month int) (*iaas.BillByContractYearMonthResult, error) { 63 results, _ := find(o.key, iaas.APIDefaultZone, nil) 64 var values []*iaas.Bill 65 for _, res := range results { 66 dest := &iaas.Bill{} 67 copySameNameField(res, dest) 68 if dest.Date.Year() == year && int(dest.Date.Month()) == month { 69 values = append(values, dest) 70 } 71 } 72 return &iaas.BillByContractYearMonthResult{ 73 Total: len(results), 74 Count: len(results), 75 From: 0, 76 Bills: values, 77 }, nil 78 } 79 80 // Read is fake implementation 81 func (o *BillOp) Read(ctx context.Context, id types.ID) (*iaas.BillReadResult, error) { 82 results, _ := find(o.key, iaas.APIDefaultZone, nil) 83 var values []*iaas.Bill 84 for _, res := range results { 85 dest := &iaas.Bill{} 86 copySameNameField(res, dest) 87 if dest.ID == id { 88 values = append(values, dest) 89 } 90 } 91 return &iaas.BillReadResult{ 92 Total: len(results), 93 Count: len(results), 94 From: 0, 95 Bills: values, 96 }, nil 97 } 98 99 // Details is fake implementation 100 func (o *BillOp) Details(ctx context.Context, memberCode string, id types.ID) (*iaas.BillDetailsResult, error) { 101 rawResults := ds().Get(o.key+"Details", iaas.APIDefaultZone, id) 102 if rawResults == nil { 103 return nil, newErrorNotFound(o.key+"Details", id) 104 } 105 106 results := rawResults.(*[]*iaas.BillDetail) 107 var values []*iaas.BillDetail 108 for _, res := range *results { 109 dest := &iaas.BillDetail{} 110 copySameNameField(res, dest) 111 values = append(values, dest) 112 } 113 114 return &iaas.BillDetailsResult{ 115 Total: len(*results), 116 Count: len(*results), 117 From: 0, 118 BillDetails: values, 119 }, nil 120 } 121 122 // DetailsCSV is fake implementation 123 func (o *BillOp) DetailsCSV(ctx context.Context, memberCode string, id types.ID) (*iaas.BillDetailCSV, error) { 124 rawResults := ds().Get(o.key+"Details", iaas.APIDefaultZone, id) 125 if rawResults == nil { 126 return nil, newErrorNotFound(o.key+"Details", id) 127 } 128 129 results := rawResults.(*[]*iaas.BillDetail) 130 for _, res := range *results { 131 dest := &iaas.BillDetail{} 132 copySameNameField(res, dest) 133 } 134 135 return &iaas.BillDetailCSV{ 136 Count: len(*results), 137 ResponsedAt: time.Now(), 138 Filename: "sakura_cloud_20yy_mm.csv", 139 RawBody: "this,is,dummy,header\r\nthis,is,dummy,body", 140 HeaderRow: []string{"this", "is", "dummy", "header"}, 141 BodyRows: [][]string{ 142 { 143 "this", "is", "dummy", "body", 144 }, 145 }, 146 }, nil 147 }