github.com/Johannestj/minyr@v0.0.0-20230414065407-214b2a4bca49/yr/yr_test.go (about)

     1  package yr
     2  
     3  import (
     4  	"bufio"
     5  	"encoding/csv"
     6  	"io"
     7  	"os"
     8  	"strings"
     9  	"testing"
    10  )
    11  
    12  // antall linjer i filen er 16756
    13  func TestFileLineCount(t *testing.T) {
    14  	filename := ("kjevik-temp-celsius-20220318-20230318.csv")
    15  	expectedLines := 16756
    16  
    17  	file, err := os.Open(filename)
    18  	if err != nil {
    19  		t.Fatalf("Feilet å åpne fil %s: %v", filename, err)
    20  	}
    21  	defer file.Close()
    22  
    23  	scanner := bufio.NewScanner(file)
    24  	lineCount := 0
    25  	for scanner.Scan() {
    26  		lineCount++
    27  	}
    28  	if err := scanner.Err(); err != nil {
    29  		t.Fatalf("Feilet å skanne fil %s: %v", filename, err)
    30  	}
    31  
    32  	if lineCount != expectedLines {
    33  		t.Errorf("uforusett linje antall i fil %s: forventet %d, fikk %d", filename, expectedLines, lineCount)
    34  	}
    35  }
    36  
    37  // gitt "Kjevik;SN39040;18.03.2022 01:50;6" ønsker å få (want) "Kjevik;SN39040;18.03.2022 01:50;42,8"
    38  func TestConversion8(t *testing.T) {
    39  	// åpnee csv filen
    40  	file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv")
    41  	if err != nil {
    42  		t.Errorf("Feilet å åpne fil: %v", err)
    43  	}
    44  	defer file.Close()
    45  
    46  	// Lager en ny csv lesere for å lese csv filen
    47  	reader := csv.NewReader(file)
    48  
    49  	// Loop gjennom hver linje i csv filen
    50  	for {
    51  		// Leser en linje fra csv filen
    52  		line, err := reader.Read()
    53  		if err != nil {
    54  			if err == io.EOF {
    55  				break
    56  			} else {
    57  				t.Errorf("Feilet å lese filen: %v", err)
    58  				return
    59  			}
    60  		}
    61  
    62  		// Sjekker om linjen matcher den spesifiserte linjen
    63  		if line[0] == "Kjevik" && line[1] == "SN39040" && line[2] == "18.03.2022 01:50" {
    64  			// Sjekker om temperaturen er riktig konvertert
    65  			want := "42.8"
    66  			got := line[3]
    67  			if got != want {
    68  				t.Errorf("Konvertering feil. Fikk %v, forventer %v", got, want)
    69  			}
    70  			return
    71  		}
    72  	}
    73  	t.Errorf("Linje ikke funnet.")
    74  }
    75  
    76  // gitt "Kjevik;SN39040;07.03.2023 18:20;0" ønsker å få (want) "Kjevik;SN39040;07.03.2023 18:20;32"
    77  func TestConversion32(t *testing.T) {
    78  	file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv")
    79  	if err != nil {
    80  		t.Errorf("Feilet å åpne fil: %v", err)
    81  	}
    82  	defer file.Close()
    83  
    84  	reader := csv.NewReader(file)
    85  
    86  	for {
    87  		line, err := reader.Read()
    88  		if err != nil {
    89  			if err == io.EOF {
    90  				break
    91  			} else {
    92  				t.Errorf("Feilet å lese filen: %v", err)
    93  				return
    94  			}
    95  		}
    96  
    97  		if line[0] == "Kjevik" && line[1] == "SN39040" && line[2] == "07.03.2023 18:20" {
    98  			want := "32.0"
    99  			got := line[3]
   100  			if got != want {
   101  				t.Errorf("Konvertering feilet. Fikk %v, forventer %v", got, want)
   102  			}
   103  			return
   104  		}
   105  	}
   106  
   107  	t.Errorf("Linje ikke funnet i filen.")
   108  }
   109  
   110  // gitt "Kjevik;SN39040;08.03.2023 02:20;-11" ønsker å få (want) "Kjevik;SN39040;08.03.2023 02:20;12.2"
   111  func TestConversion2(t *testing.T) {
   112  	file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv")
   113  	if err != nil {
   114  		t.Errorf("Feilet å åpne fil: %v", err)
   115  	}
   116  	defer file.Close()
   117  
   118  	reader := csv.NewReader(file)
   119  
   120  	for {
   121  		line, err := reader.Read()
   122  		if err != nil {
   123  			if err == io.EOF {
   124  				break
   125  			} else {
   126  				t.Errorf("Feilet å lese filen: %v", err)
   127  				return
   128  			}
   129  		}
   130  
   131  		if line[0] == "Kjevik" && line[1] == "SN39040" && line[2] == "08.03.2023 02:20" {
   132  			want := "12.2"
   133  			got := line[3]
   134  			if got != want {
   135  				t.Errorf("Konvertering feilet. Fikk %v, forventer %v", got, want)
   136  			}
   137  			return
   138  		}
   139  	}
   140  
   141  	t.Errorf("Linje ikke funnet i filen.")
   142  }
   143  
   144  /*
   145  gitt "Data er gyldig per 18.03.2023 (CC BY 4.0), Meteorologisk institutt (MET);;;" ønsker å få (want)
   146  "Data er basert på gyldig data (per 18.03.2023) (CC BY 4.0) fra Meteorologisk institutt (MET);endringen er gjort av
   147  STUDENTENS_NAVN", hvor STUDENTENS_NAVN er navn på studenten som leverer besvarelsen
   148  */
   149  func TestLastLineOfFile(t *testing.T) {
   150  	file, err := os.Open("kjevik-temp-fahr-20220318-20230318.csv")
   151  	if err != nil {
   152  		t.Fatal(err)
   153  	}
   154  	defer file.Close()
   155  
   156  	// Skanner gjennom filen linje for linje, og holder styr på den siste linjen som ble lest
   157  	var lastLine string
   158  	scanner := bufio.NewScanner(file)
   159  	for scanner.Scan() {
   160  		lastLine = scanner.Text()
   161  	}
   162  	if err := scanner.Err(); err != nil {
   163  		t.Fatal(err)
   164  	}
   165  
   166  	// Sjekker at den siste linjen inneholder den forventede teksten
   167  	expectedText := "Data er basert paa gyldig data (per 18.03.2023) (CC BY 4.0) fra Meteorologisk institutt (MET); endringen er gjort av Johannes Tjøstheim"
   168  	if !strings.Contains(lastLine, expectedText) {
   169  		t.Errorf("Siste linje i filen matcher ikke forventet resultat. fikk: %q, forventet tekst: %q", lastLine, expectedText)
   170  	}
   171  }
   172  
   173  func TestAverageCelsius(t *testing.T) {
   174  	expected := 8.55897099200191
   175  
   176  	// Endrer arbeidskatalogen til katalogen der CSV-filen befinner seg
   177  	err := os.Chdir("..")
   178  	if err != nil {
   179  		t.Fatalf("Feil: %v", err)
   180  	}
   181  
   182  	// Endrer arbeidskatalogen tilbake til katalogen der testfilen befinner seg når testen er ferdig
   183  	defer func() {
   184  		err = os.Chdir("yr")
   185  		if err != nil {
   186  			t.Fatalf("Feil: %v", err)
   187  		}
   188  	}()
   189  
   190  	avg, err := Average("c")
   191  	if err != nil {
   192  		t.Fatalf("Feil: %v", err)
   193  	}
   194  
   195  	if avg != expected {
   196  		t.Fatalf("Gjennomsnittet er %v, men forventet %v", avg, expected)
   197  	}
   198  }