Skip to content

Commit 5bd2a3b

Browse files
authored
Merge pull request #14 from PostHog/add-pr-ci-checks
chore: Add basic github actions PR checks
2 parents 47b041b + 3a8e1ff commit 5bd2a3b

File tree

5 files changed

+86
-4
lines changed

5 files changed

+86
-4
lines changed

.env.example

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
POSTHOG_RS_E2E_TEST_API_KEY=phc_XXXX # used in tests

.github/workflows/pr.yaml

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
name: Test PR
2+
3+
on: [pull_request]
4+
5+
jobs:
6+
test:
7+
name: Run Tests
8+
runs-on: ubuntu-latest
9+
10+
steps:
11+
- name: Checkout code
12+
uses: actions/checkout@v4
13+
14+
- name: Set up Rust
15+
run: |
16+
rustup update stable
17+
rustup default stable
18+
rustup component add rustfmt clippy
19+
20+
- name: Print Rust version
21+
run: rustc --version
22+
23+
- name: Build
24+
run: cargo build --verbose
25+
26+
- name: Unit test
27+
run: cargo test --verbose
28+
29+
- name: E2E test
30+
run: cargo test --verbose --features e2e-test --no-default-features
31+
env:
32+
POSTHOG_RS_E2E_TEST_API_KEY: "${{ secrets.POSTHOG_RS_E2E_TEST_API_KEY }}"
33+
34+
- name: Check formatting
35+
run: cargo fmt -- --check
36+
37+
- name: Clippy
38+
run: cargo clippy -- -D warnings

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
*.iml
33
.idea/
44
Cargo.lock
5+
.env

Cargo.toml

+7
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,10 @@ serde = { version = "1.0.125", features = ["derive"] }
1515
chrono = {version = "0.4.19", features = ["serde"] }
1616
serde_json = "1.0.64"
1717
semver = "1.0.24"
18+
19+
[dev-dependencies]
20+
dotenv = "0.15.0"
21+
ctor = "0.1.26"
22+
23+
[features]
24+
e2e-test = []

src/lib.rs

+39-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
use chrono::NaiveDateTime;
22
use reqwest::blocking::Client as HttpClient;
33
use reqwest::header::CONTENT_TYPE;
4+
use semver::Version;
45
use serde::Serialize;
56
use std::collections::HashMap;
67
use std::fmt::{Display, Formatter};
78
use std::time::Duration;
8-
use semver::Version;
99

1010
extern crate serde_json;
1111

@@ -173,19 +173,54 @@ impl Event {
173173
}
174174
}
175175

176+
#[cfg(test)]
177+
mod test_setup {
178+
use ctor::ctor;
179+
use dotenv::dotenv;
180+
181+
#[ctor]
182+
fn load_dotenv() {
183+
dotenv().ok(); // Load the .env file
184+
println!("Loaded .env for tests");
185+
}
186+
}
187+
176188
#[cfg(test)]
177189
pub mod tests {
178190
use super::*;
179-
use chrono::Utc;
191+
192+
// see https://us.posthog.com/project/115809/ for the e2e project
180193

194+
#[test]
195+
fn inner_event_adds_lib_properties_correctly() {
196+
// Arrange
197+
let mut event = Event::new("unit test event", "1234");
198+
event.insert_prop("key1", "value1").unwrap();
199+
let api_key = "test_api_key".to_string();
200+
201+
// Act
202+
let inner_event = InnerEvent::new(event, api_key);
203+
204+
// Assert
205+
let props = &inner_event.properties.props;
206+
assert_eq!(
207+
props.get("$lib_name"),
208+
Some(&serde_json::Value::String("posthog-rs".to_string()))
209+
);
210+
}
211+
212+
#[cfg(feature = "e2e-test")]
181213
#[test]
182214
fn get_client() {
183-
let client = crate::client(env!("POSTHOG_API_KEY"));
215+
use std::collections::HashMap;
216+
217+
let api_key = std::env::var("POSTHOG_RS_E2E_TEST_API_KEY").unwrap();
218+
let client = crate::client(api_key.as_str());
184219

185220
let mut child_map = HashMap::new();
186221
child_map.insert("child_key1", "child_value1");
187222

188-
let mut event = Event::new("test", "1234");
223+
let mut event = Event::new("e2e test event", "1234");
189224
event.insert_prop("key1", "value1").unwrap();
190225
event.insert_prop("key2", vec!["a", "b"]).unwrap();
191226
event.insert_prop("key3", child_map).unwrap();

0 commit comments

Comments
 (0)