mirror of
				https://github.com/aclindsa/moneygo.git
				synced 2025-10-30 01:23:26 -04:00 
			
		
		
		
	testing: Add initial report tabulation test
This commit is contained in:
		| @@ -81,9 +81,14 @@ type Tabulation struct { | ||||
| 	Series   map[string]*Series | ||||
| } | ||||
|  | ||||
| func (r *Tabulation) Write(w http.ResponseWriter) error { | ||||
| func (t *Tabulation) Write(w http.ResponseWriter) error { | ||||
| 	enc := json.NewEncoder(w) | ||||
| 	return enc.Encode(r) | ||||
| 	return enc.Encode(t) | ||||
| } | ||||
|  | ||||
| func (t *Tabulation) Read(json_str string) error { | ||||
| 	dec := json.NewDecoder(strings.NewReader(json_str)) | ||||
| 	return dec.Decode(t) | ||||
| } | ||||
|  | ||||
| func GetReport(tx *Tx, reportid int64, userid int64) (*Report, error) { | ||||
|   | ||||
| @@ -48,6 +48,15 @@ func deleteReport(client *http.Client, r *handlers.Report) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func tabulateReport(client *http.Client, reportid int64) (*handlers.Tabulation, error) { | ||||
| 	var t handlers.Tabulation | ||||
| 	err := read(client, &t, "/report/"+strconv.FormatInt(reportid, 10)+"/tabulation", "tabulation") | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	return &t, nil | ||||
| } | ||||
|  | ||||
| func TestCreateReport(t *testing.T) { | ||||
| 	RunWith(t, &data[0], func(t *testing.T, d *TestData) { | ||||
| 		for i := 0; i < len(data[0].reports); i++ { | ||||
| @@ -205,3 +214,68 @@ func TestDeleteReport(t *testing.T) { | ||||
| 		} | ||||
| 	}) | ||||
| } | ||||
| func seriesEqualityHelper(t *testing.T, orig, curr map[string]*handlers.Series, name string) { | ||||
| 	if orig == nil || curr == nil { | ||||
| 		if orig != nil { | ||||
| 			t.Fatalf("`%s` series unexpectedly nil", name) | ||||
| 		} | ||||
| 		if curr != nil { | ||||
| 			t.Fatalf("`%s` series unexpectedly non-nil", name) | ||||
| 		} | ||||
| 		return | ||||
| 	} | ||||
| 	if len(orig) != len(curr) { | ||||
| 		t.Errorf("Series in question: %v\n", curr) | ||||
| 		t.Fatalf("Series' don't contain the same number of sub-series (found %d, expected %d)", len(curr), len(orig)) | ||||
| 	} | ||||
| 	for k, os := range orig { | ||||
| 		cs := curr[k] | ||||
| 		if len(os.Values) != len(cs.Values) { | ||||
| 			t.Fatalf("`%s` series doesn't contain the same number of Values (found %d, expected %d)", k, len(cs.Values), len(os.Values)) | ||||
| 		} | ||||
| 		for i, v := range os.Values { | ||||
| 			if v != cs.Values[i] { | ||||
| 				t.Errorf("Series doesn't contain the same values (found %f, expected %f)", cs.Values[i], v) | ||||
| 			} | ||||
| 		} | ||||
| 		seriesEqualityHelper(t, os.Series, cs.Series, k) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func tabulationEqualityHelper(t *testing.T, orig, curr *handlers.Tabulation) { | ||||
| 	if orig.Title != curr.Title { | ||||
| 		t.Errorf("Tabulation Title doesn't match") | ||||
| 	} | ||||
| 	if orig.Subtitle != curr.Subtitle { | ||||
| 		t.Errorf("Tabulation Subtitle doesn't match") | ||||
| 	} | ||||
| 	if orig.Units != curr.Units { | ||||
| 		t.Errorf("Tabulation Units doesn't match") | ||||
| 	} | ||||
| 	if len(orig.Labels) != len(curr.Labels) { | ||||
| 		t.Fatalf("Tabulation doesn't contain the same number of labels") | ||||
| 	} | ||||
| 	for i, label := range orig.Labels { | ||||
| 		if label != curr.Labels[i] { | ||||
| 			t.Errorf("Label %d doesn't match", i) | ||||
| 		} | ||||
| 	} | ||||
| 	seriesEqualityHelper(t, orig.Series, curr.Series, "top-level") | ||||
| } | ||||
|  | ||||
| func TestTabulateReport(t *testing.T) { | ||||
| 	RunWith(t, &data[0], func(t *testing.T, d *TestData) { | ||||
| 		for i := 0; i < len(data[0].tabulations); i++ { | ||||
| 			orig := data[0].tabulations[i] | ||||
| 			origReport := data[0].reports[orig.ReportId] | ||||
| 			report := d.reports[orig.ReportId] | ||||
|  | ||||
| 			rt2, err := tabulateReport(d.clients[origReport.UserId], report.ReportId) | ||||
| 			if err != nil { | ||||
| 				t.Fatalf("Unexpected error tabulating report") | ||||
| 			} | ||||
|  | ||||
| 			tabulationEqualityHelper(t, &orig, rt2) | ||||
| 		} | ||||
| 	}) | ||||
| } | ||||
|   | ||||
| @@ -41,6 +41,7 @@ type TestData struct { | ||||
| 	transactions []handlers.Transaction | ||||
| 	prices       []handlers.Price | ||||
| 	reports      []handlers.Report | ||||
| 	tabulations  []handlers.Tabulation | ||||
| } | ||||
|  | ||||
| type TestDataFunc func(*testing.T, *TestData) | ||||
| @@ -282,7 +283,7 @@ var data = []TestData{ | ||||
| 			handlers.Transaction{ | ||||
| 				UserId:      0, | ||||
| 				Description: "Cable", | ||||
| 				Date:        time.Date(2017, time.September, 1, 0, 00, 00, 0, time.UTC), | ||||
| 				Date:        time.Date(2017, time.September, 2, 0, 00, 00, 0, time.UTC), | ||||
| 				Splits: []*handlers.Split{ | ||||
| 					&handlers.Split{ | ||||
| 						Status:     handlers.Reconciled, | ||||
| @@ -321,7 +322,7 @@ var data = []TestData{ | ||||
| 		reports: []handlers.Report{ | ||||
| 			handlers.Report{ | ||||
| 				UserId: 0, | ||||
| 				Name:   "Monthly Expenses", | ||||
| 				Name:   "This Year's Monthly Expenses", | ||||
| 				Lua: ` | ||||
| function account_series_map(accounts, tabulation) | ||||
|     map = {} | ||||
| @@ -347,12 +348,14 @@ function account_series_map(accounts, tabulation) | ||||
| end | ||||
|  | ||||
| function generate() | ||||
|     year = date.now().year | ||||
|     year = 2017 | ||||
|     account_type = account.Expense | ||||
|  | ||||
|     accounts = get_accounts() | ||||
|     t = tabulation.new(12) | ||||
|     t:title(year .. " Monthly Expenses") | ||||
|     t:subtitle("This is my subtitle") | ||||
|     t:units(get_default_currency().Symbol) | ||||
|     series_map = account_series_map(accounts, t) | ||||
|  | ||||
|     for month=1,12 do | ||||
| @@ -374,5 +377,38 @@ function generate() | ||||
| end`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		tabulations: []handlers.Tabulation{ | ||||
| 			handlers.Tabulation{ | ||||
| 				ReportId: 0, | ||||
| 				Title:    "2017 Monthly Expenses", | ||||
| 				Subtitle: "This is my subtitle", | ||||
| 				Units:    "USD", | ||||
| 				Labels:   []string{"2017-01-01", "2017-02-01", "2017-03-01", "2017-04-01", "2017-05-01", "2017-06-01", "2017-07-01", "2017-08-01", "2017-09-01", "2017-10-01", "2017-11-01", "2017-12-01"}, | ||||
| 				Series: map[string]*handlers.Series{ | ||||
| 					"Assets": &handlers.Series{ | ||||
| 						Values: []float64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||||
| 						Series: map[string]*handlers.Series{ | ||||
| 							"Credit Union Checking": &handlers.Series{ | ||||
| 								Values: []float64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||||
| 								Series: map[string]*handlers.Series{}, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 					"Expenses": &handlers.Series{ | ||||
| 						Values: []float64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, | ||||
| 						Series: map[string]*handlers.Series{ | ||||
| 							"Groceries": &handlers.Series{ | ||||
| 								Values: []float64{0, 0, 0, 0, 0, 0, 0, 0, 0, 87.19, 0, 0}, | ||||
| 								Series: map[string]*handlers.Series{}, | ||||
| 							}, | ||||
| 							"Cable": &handlers.Series{ | ||||
| 								Values: []float64{0, 0, 0, 0, 0, 0, 0, 0, 39.99, 0, 0, 0}, | ||||
| 								Series: map[string]*handlers.Series{}, | ||||
| 							}, | ||||
| 						}, | ||||
| 					}, | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user